// Definition for singly-linked list.
struct ListNode
{
int val;
struct ListNode *next;
};
struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2)
{
int a=0;
int b=0;
int sum=0;
int carry=0;
struct ListNode* resultRoot = NULL;
struct ListNode* previousNode = NULL;
if(l1 == NULL)
return l2;
if(l2 == NULL)
return l1;
while(l1 != NULL || l2 != NULL || carry > 0)
{
struct ListNode* node = (struct ListNode *)malloc(sizeof(struct ListNode));
a = (l1 != NULL)? l1->val: 0;
b = (l2 != NULL)? l2->val: 0;
sum = (carry+a+b)%10;
carry = ((carry+a+b)>9)?1:0;
node->val = sum;
node->next = NULL;
// For the first node.
if (resultRoot == NULL)
{
resultRoot = node;
previousNode = node;
}
else
{
previousNode->next = node;
previousNode = node;
}
l1= (l1!=NULL)? l1->next: l1;
l2= (l2!=NULL)? l2->next: l2;
}
return resultRoot;
}
void printList(struct ListNode* root)
{
while(root!=NULL)
{
printf("%d ",root->val);
root = root->next;
}
printf("\n");
}
main()
{
// List-1 (9,9,9)
struct ListNode* node1 = (struct ListNode *)malloc(sizeof(struct ListNode));
node1->val=9;
node1->next=(struct ListNode *)malloc(sizeof(struct ListNode));
node1->next->val=9;
node1->next->next=(struct ListNode *)malloc(sizeof(struct ListNode));
node1->next->next->val=9;
node1->next->next->next=NULL;
printList(node1);
// List-1 (9,9,9)
struct ListNode* node2 = (struct ListNode *)malloc(sizeof(struct ListNode));
node2->val=9;
node2->next=(struct ListNode *)malloc(sizeof(struct ListNode));
node2->next->val=9;
node2->next->next=(struct ListNode *)malloc(sizeof(struct ListNode));
node2->next->next->val=9;
node2->next->next->next=NULL;
printList(node2);
// Sum of both lists.
printList(addTwoNumbers(node1,node2));
}
Add two numbers represented by linked lists (in reverse order)
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment