ListNode*l;classSolution{public:ListNode*addTwoNumbers(ListNode*l1,ListNode*l2){// Note: The Solution object is instantiated only once and is reused by each test case.
l1=Reverse(l1);l2=Reverse(l2);ListNode*ans=NULL;ListNode*ansbackup=NULL;intsum=0;intnow=0;intnext=0;while(true){if(l1==NULL||l2==NULL)break;sum=l1->val+l2->val+next;now=sum%10;next=sum/10;ListNode*tmp=newListNode(now);if(ans==NULL){ans=tmp;ansbackup=ans;}else{ans->next=tmp;ans=ans->next;}l1=l1->next;l2=l2->next;}if(l1!=NULL){while(true){if(l1==NULL)break;sum=l1->val+next;now=sum%10;next=sum/10;ListNode*tmp=newListNode(now);ans->next=tmp;ans=ans->next;l1=l1->next;}}if(l2!=NULL){while(true){if(l2==NULL)break;sum=l2->val+next;now=sum%10;next=sum/10;ListNode*tmp=newListNode(now);ans->next=tmp;ans=ans->next;l2=l2->next;}}if(next!=0){ListNode*tmp=newListNode(next);ans->next=tmp;ans=ans->next;}returnansbackup;}ListNode*Reverse(ListNode*l){ListNode*before;ListNode*now;ListNode*next;if(l->next==NULL)returnl;before=l;now=l->next;while(now==NULL){next=now->next;now->next=before;before=now;now=next;}returnbefore;}};