这道题我是直接在原链表上操作了,开第三条链表用于存储的方法可以降低代码量,但是因为频繁申请空间导致速度变慢。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int j(0);
if(!l1) return l2;
ListNode *l3=l1,*l4;
while(l1)
{
l4=l1;
if(l2) {
l1->val+=l2->val+j;
l2=l2->next;
}else{
l1->val+=j;
}
if(l1->val>9)
{
l1->val-=10;
j=1;
}else{
j=0;
}
l1=l1->next;
}
if(l2)
{
l4->next=l2;
while(j)
{
if(l2)
{
++l2->val;
l4=l2;
if(l2->val>9)
{
l2->val-=10;
j=1;
}else{
j=0;
}
l2=l2->next;
}else{
l4->next=new ListNode(1);
break;
}
}
}else if(j)
{
l4->next=new ListNode(1);
}
return l3;
}
};