/**
* 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 *newhead=new ListNode(0);
ListNode *p=newhead;
int count=0;
while(l1&&l2)
{
p->next=new ListNode(0);
p=p->next;
if(l1->val+l2->val+count<=9)
{ p->val=l1->val+l2->val+count;
count=0;
}
else
{p->val=l1->val+l2->val+count-10;
count=1;
}
l1=l1->next;
l2=l2->next;
}
p->next=l1?l1:l2;
if(count==1)
{
if(l1||l2)
p->next=l1?l1:l2;
else
p->next=new ListNode(0);
while(p->next!=NULL)
{ p=p->next;
if(p->val+count<=9)
{if(count==1)
p->val+=1;
count=0;
}
if(p->val+count>9)
{count=1;
p->val=0;
if(p->next==NULL)
{
p->next=new ListNode(1);
count=0;
}
}
}
}
return newhead->next;
}
};