Add Two Numbers

Problem: Add Two Numbers

It's good for us that numbers are in reverse order in list. We can do adding from the first digit to the last and do carry-over if necessary.

Code in Python:

class Solution(object):
    def addTwoNumbers(self, l1, l2):
        """
        :type l1: ListNode
        :type l2: ListNode
        :rtype: ListNode
        """
        ans = ListNode(0)
        cur, x = ans, 0
        while True:
            if not l1 and not l2:
                if x:
                    newNode = ListNode(x)
                    cur.next = newNode
                break
            elif not l1:
                newNode = ListNode((l2.val + x) % 10)
                x = (l2.val + x) / 10
                l2 = l2.next
            elif not l2:
                newNode = ListNode((l1.val + x) % 10)
                x = (l1.val + x) / 10
                l1 = l1.next
            else:
                newNode = ListNode((l1.val + l2.val + x) % 10)
                x = (l1.val + l2.val + x) / 10
                l1, l2 = l1.next, l2.next
            cur.next = newNode
            cur = cur.next
        return ans.next

Code in Java:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode ans = new ListNode(0);
        ListNode prev = ans;
        int carry = 0;
        while (l1 != null && l2 != null) {
            int sum = l1.val + l2.val + carry;
            carry = sum / 10;
            ListNode tmp = new ListNode(sum % 10);
            prev.next = tmp; prev = prev.next;
            l1 = l1.next; l2 = l2.next;
        }
        if (l1 != null) prev.next = addTwoNumbers(l1, new ListNode(carry));
        else if (l2 != null) prev.next = addTwoNumbers(l2, new ListNode(carry));
        else if (carry == 1) prev.next = new ListNode(1);
        return ans.next;
    }
}

results matching ""

    No results matching ""