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; }
说实话刷leetcode让我怀疑我是不是适合搞这些。。。。