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;
result->next=NULL;
struct ListNode *p;
p=result;
int c=0;
while (p1!=NULL || p2!=NULL||c!=0 )//加c为了判断5 ,5 两组进位数据,多了1进位
{
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;
p1=(p1==NULL ? NULL : p1->next);//用于看p->next是NULL的话,指针转移到这里停了
p2=(p2==NULL ? NULL : p2->next);
if(p1!=NULL||p2!=NULL||c!=0)//防止最后多出来一个节点
{
p->next=(struct ListNode*)malloc(sizeof(struct ListNode));
p->next->val=0;
p->next->next=NULL;
p=p->next;
}
}
return result;
}