You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1’s digit is at the head of the list. Write a function that adds the two numbers and returns the sum as a linked
list.
EXAMPLE
Input: (3 -> 1 -> 5) + (5 -> 9 -> 2)
EXAMPLE
Input: (3 -> 1 -> 5) + (5 -> 9 -> 2)
Output: 8 -> 0 -> 8
Node* add_list(Node* n1,Node* n2){
if(n1==NULL)
return n2;
if(n2==NULL)
return n1;
Node* res,*before=NULL;
int carry=0;
while(n1&&n2){
int sum=n1->data+n2->data+carry;
Node* nd=new Node;
nd->data=sum%10;
nd->next=NULL;
carry=sum/10;
if(before==NULL){
before=nd;
res=nd;
}else{
before->next=nd;
before=before->next;
}
n1=n1->next;
n2=n2->next;
}
Node* left=NULL;
if(n1!=NULL)
left=n1;
if(n2!=NULL)
left=n2;
if(left==NULL){
if(carry!=0){
Node* nd=new Node;
nd->data=carry;
nd->next=NULL;
before->next=nd;
}
return res;
}
while(left!=NULL){
int sum=left->data+carry;
Node* nd=new Node;
nd->data=sum%10;
nd->next=NULL;
carry=sum/10;
before->next=nd;
before=before->next;
left=left->next;
}
return res;
}