LeetCode解題小結:
原題:給定兩個非空的鏈表,表示兩個非負整數。 數字以相反的順序存儲,每個節點包含一個數字。 兩個數字相加,並將結果作爲鏈表返回。
注意:
兩個數字是反向存儲相加的,例如:342+465=807。
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p1=l1;
struct ListNode *p2=l2;
struct ListNode *result=(struct ListNode *)malloc(sizeof(struct ListNode));
result->val=0;
struct ListNode *p=NULL;
int c=0;
while (p1!=NULL || p2!=NULL || c!=0)
{
if(p == NULL)
{
p=result;
}
else
{
p->next=(struct ListNode*)malloc(sizeof(struct ListNode)); //這裏寫成p會出錯
p->next->val=0;
p=p->next;
}
int a=(p1==NULL ? 0:p1->val);
int b=(p2==NULL ? 0:p2->val);
int s=(a+b+c)%10;
c=(a+b+c)/10;
p->val=s;
p->next=NULL;
p1=(p1==NULL ? NULL : p1->next);
p2=(p2==NULL ? NULL : p2->next);
}
return result;
}