Add Two Numbers
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
My Submitted Code
/**
* 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* head=NULL ;
ListNode* tail=NULL ;
ListNode* p1=l1;
ListNode* p2=l2;
list<int > carrs;
while (p1||p2){
int carry=0 ;
if (!carrs.empty ())
{
carrs.pop_back();
carry=1 ;
}
int sum=0 ;
if (p1){
sum+=p1->val;
}
if (p2){
sum+=p2->val;
}
sum+=carry;
if (sum>=10 ){
carrs.push_back(1 );
}
ListNode* node=new ListNode(sum%10 );
if (!head){
head=node;
tail=node;
}else {
tail->next =node;
tail=node;
}
if (p1){
p1=p1->next ;
}
if (p2){
p2=p2->next ;
}
}
if (!carrs.empty ()){
ListNode* node=new ListNode(1 );
tail->next =node;
}
return head;
}
};