Add Two Numbers II — Stack to Handle Forward Order

Sanjeev SharmaSanjeev Sharma
2 min read

Advertisement

Problem 222 · Add Two Numbers II

Difficulty: Medium · Pattern: Stack + Carry

Numbers stored in forward order (most significant digit first).

Solutions

# Python
def addTwoNumbers(l1, l2):
    s1, s2 = [], []
    while l1: s1.append(l1.val); l1 = l1.next
    while l2: s2.append(l2.val); l2 = l2.next
    carry = 0; head = None
    while s1 or s2 or carry:
        a = s1.pop() if s1 else 0
        b = s2.pop() if s2 else 0
        total = a + b + carry
        carry, val = divmod(total, 10)
        node = ListNode(val)
        node.next = head
        head = node
    return head
// Java
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
    Deque<Integer> s1 = new ArrayDeque<>(), s2 = new ArrayDeque<>();
    while (l1 != null) { s1.push(l1.val); l1 = l1.next; }
    while (l2 != null) { s2.push(l2.val); l2 = l2.next; }
    int carry = 0; ListNode head = null;
    while (!s1.isEmpty() || !s2.isEmpty() || carry != 0) {
        int sum = carry + (s1.isEmpty() ? 0 : s1.pop()) + (s2.isEmpty() ? 0 : s2.pop());
        carry = sum / 10;
        ListNode node = new ListNode(sum % 10);
        node.next = head; head = node;
    }
    return head;
}

Complexity

  • Time: O(m+n)
  • Space: O(m+n)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro