CC--Q2.5

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.

你可能感兴趣的:(CC--Q2.5)