2.5 Sum Lists: 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: (7-> 1 -> 6) + (5 -> 9 -> 2) .Thatis,617 + 295.
Output: 2 - > 1 - > 9. That is, 912.
FOLLOW UP
Suppose the digits are stored in forward order. Repeat the above problem.
Input: (6 -> 1 -> 7) + (2 -> 9 -> 5).Thatis,617 + 295.
Output: 9 - > 1 - > 2. That is, 912.
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
return helper(l1,l2,0);
}
public ListNode helper(ListNode l1, ListNode l2,int carry){
if(l1==null && l2==null && carry==0){
return null;
}
ListNode result = new ListNode(0);
int value = carry;
if(l1!=null){
value += l1.val;
}
if(l2!=null){
value+=l2.val;
}
result.val= value%10;
if(l1!=null) l1 = l1.next;
if(l2!=null) l2 = l2.next;
carry = value >=10 ? 1:0;
ListNode more = helper(l1,l2,carry);
result.next = more;
return result;
}
In implementing this code, we must be careful to handle the condition when one linked list is shorter than another. We don't want to get a null pointer exception.