You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Example
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 342 + 465 = 807.
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
int x,y,temp = 0;
int result;
struct ListNode *head = (struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode *ptr = head;
struct ListNode *ptr1 = head;
while(l1!= null || l2!= null)
{
x = (l1 != null)?l1->val:0;
y = (l2 != null)?l2->val:0;
result = (temp+x+y)%10;
temp = (temp+x+y)/10;
ptr = (struct ListNode*)malloc(sizeof(struct ListNode));
ptr->val = result;
ptr->next = null ;
ptr1->next = ptr;
ptr1 = ptr;
l1 = (l1!= null)?l1->next:null;
l2 = (l2!= null)?l2->next:null;
}
if(temp > 0)
{
ptr = (struct ListNode *)malloc(sizeof(struct ListNode));
ptr->val = temp;
ptr->next = null;
ptr1 ->next = ptr;
}
return head->next;
}
在第一次进行编译的时候,错误提示:
member access within misaligned address 0x000000000031 for type 'struct ListNode', which requires 8 byte alignment,
在申请空间时代码如下:
ptr = (struct ListNode*)malloc(sizeof(struct ListNode));
由于结构体内存在next指针,而申请结构体空间后同时定义了next指针,此时next指针未指向任何空间,故在测试时可能导致上述错误。
解决方法为:
增加代码使next指针指向空。
ptr->next=NULL;