Given two numbers represented by two lists, write a function that returns sum list. The sum list is list representation of addition of two input numbers.
Example 1
Input: First List: 5->6->3 // represents number 365 Second List: 8->4->2 // represents number 248 Output Resultant list: 3->1->6 // represents number 613
Example 2
Input: First List: 7->5->9->4->6 // represents number 64957 Second List: 8->4 // represents number 48 Output Resultant list: 5->0->0->5->6 // represents number 65005
Solution
Traverse both lists. One by one pick nodes of both lists and add the values. If sum is more than 10 then make carry as 1 and reduce sum. If one list has more elements than the other then consider remaining values of this list as 0. Following is Java implementation of this approach.
public ListNode addLinkedList(ListNode a, ListNode b) {
ListNode result = new ListNode(0);
ListNode dummy = result;
int carry = 0;
while(a!=null || b!=null) {
int sum = carry + ((a!=null)?a.val:0) + ((b!=null)?b.val:0);
carry = sum / 10;
result.next = new ListNode(sum%10);
result = result.next;
if(a!=null) a=a.next;
if(b!=null) b=b.next;
}
if(carry>0) {
result.next = new ListNode(carry);
}
return dummy.next;
}