ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int carry=0,sum,x,y;
ListNode q(0),*tmp1=l1,*tmp2=l2,*re=&q;
while(tmp1||tmp2)
{
x=tmp1?tmp1->val:0;
y=tmp2?tmp2->val:0;
sum=x+y+carry;
re->next=new ListNode (sum%10);
re=re->next;
carry=sum/10;
if(tmp1->next)
tmp1=tmp1->next;
if(tmp2->next)
tmp2=tmp2->next;
}
if(carry)
re->next=new ListNode(carry);
delete tmp1;
delete tmp2;
return q.next;
}
memory exceeded
ListNode preHead(0), *p = &preHead;
int extra = 0;
while (l1 || l2 || extra) {
int sum = (l1 ? l1->val : 0) + (l2 ? l2->val : 0) + extra;
extra = sum / 10;
p->next = new ListNode(sum % 10);
p = p->next;
l1 = l1 ? l1->next : l1;
l2 = l2 ? l2->next : l2;
}
return preHead.next;
看过的解法里,思路都是一样的,但是有的把carry定义为bool型,使得速度更快一点,但我还是觉得定义为int更自然一点;还有的区别就是要不要再重新定义两个L istNode 类的指针以保存L1和L2的位置,就本题而言,没有必要保存的,但是在有些情况下保存还是很有必要的
从本题中收获到的,首先再次回顾了“加法”这一套路,然后有学习到了“结构体结合加法”的套路。