You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
这个题跟67. Add Binary 思路是一样的
设置一个flag表示进位,一个da表示当前位所置的数字。
最后如果有进位,则增加一个节点。
class Solution {
public:
ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {
int flag=0,da=0;
ListNode *L;
ListNode *s,*r;
L = new ListNode(0);
r = L;
ListNode *p1,*p2;
p1 = l1;
p2 = l2;
for(p1,p2;p1!=NULL && p2!=NULL;p1 = p1->next,p2 = p2->next)
{
int temp = (p1->val + p2->val+ flag);
flag = temp / 10 ;
da = temp % 10;
s = new ListNode(da);
r->next = s;
r = s;
}
while(p1!= NULL)
{
int temp = (p1->val+ flag);
flag = temp / 10 ;
da = temp % 10;
s = new ListNode(da);
r->next = s;
r = s;
p1 = p1->next;
}
while(p2!= NULL)
{
int temp = (p2->val+ flag);
flag = temp / 10 ;
da = temp % 10;
s = new ListNode(da);
r->next = s;
r = s;
p2 = p2->next;
}
if (flag == 1)
{
s = new ListNode(flag);
r->next = s;
r = s;
}
r->next = NULL;
return L->next;
}
};