直接上错误样例:
[5]
[5]
[7,2]
[3,9]
[1]
[9,9]
[1]
[9,9,9,9]
以下为ac代码:
/**
* 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)
{
ListNode* a = l1;
ListNode* b = l2;
ListNode* ans = new ListNode(0);
ListNode* result = ans;
int sum = 0;
int ji = 0;
while(a && b)
{
sum = a->val + b->val;
ans->val = (sum + ji)%10;
if(a->next || b->next)
{
ListNode* x = new ListNode(0);
x->next = NULL;
ans->next = x;
ans = ans->next;
}
ji = (sum+ji)/10;
a = a->next;
b = b->next;
}
if(ji && a==NULL && b==NULL)
{
ListNode* y = new ListNode(0);
y->next = NULL;
ans->next = y;
ans = ans->next;
ans->val = ji;
}
if(a)
{
ans->val = (ji + a->val)%10;
ji = (ji + a->val)/10;
a = a->next;
while(a)
{
ListNode* x = new ListNode(0);
x->next = NULL;
ans->next = x;
ans = ans->next;
ans->val = (ji + a->val)%10;
ji = (ji + a->val)/10;
a = a->next;
}
if(ji)
{
ListNode* y = new ListNode(0);
y->next = NULL;
ans->next = y;
ans = ans->next;
ans->val = ji;
}
}
if(b)
{
ans->val = (ji + b->val)%10;
ji = (ji + b->val)/10;
b = b->next;
while(b)
{
ListNode* x = new ListNode(0);
x->next = NULL;
ans->next = x;
ans = ans->next;
ans->val = (ji + b->val)%10;
ji = (ji + b->val)/10;
b = b->next;
}
if(ji)
{
ListNode* y = new ListNode(0);
y->next = NULL;
ans->next = y;
ans = ans->next;
ans->val = ji;
}
}
return result;
}
};