//Memory Limit Exceeded
/**
* 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 carry=0,sum;
ListNode* tail=NULL;
ListNode* head=tail;
while(l1!=NULL && l2!= NULL)
{
sum=l1->val+l2->val+carry;
tail=new ListNode(sum%10);
tail=tail->next;
carry=sum/10;
}
if(l1==NULL)l1=l2;
while(l1!=NULL)
{
sum=l1->val+carry;
tail=new ListNode(sum%10);
tail=tail->next;
carry=sum/10;
}
if(carry!=0)
{
tail=new ListNode(carry);
tail=tail->next;
}
return head;
}
};
/* the reason of it cann`t accepeted in the first submit :
* the wrong use of the last longlist which is point to null which cann`t be assigned by the address returned by new
* the program upside may has the same wrong in tail about the last point to NULL.
/**
* 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* longlist=l1;
ListNode* shortlist=l2;
while(l1 != NULL && l2 != NULL){l1=l1->next;l2=l2->next;}
if (l1 == NULL){ ListNode* tmp=longlist;longlist=shortlist; shortlist=tmp;}
int carry=0,sum;
ListNode* longhead=longlist;
while(shortlist != NULL && longlist != NULL )
{
sum=longlist->val+shortlist->val+carry;
longlist->val=sum%10;
carry=sum/10;
longlist=longlist->next;
shortlist=shortlist->next;
}
while(longlist!=NULL)
{
sum=longlist->val+carry;
longlist->val=sum%10;
carry=sum/10;
longlist=longlist->next;
//if(carry==0)break;
}
if(carry!=0)
{
for(longlist=longhead;longlist->next!=NULL;longlist=longlist->next);/*be careful foe the last longlist which had pointed to NULL*/
longlist->next=new ListNode(carry);
}
/*while(longhead!=NULL)
{
cout<<longhead->val<<' ';
longhead=longhead->next;
}
*/
return longhead;
}
};