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;
}