Add Two Numbers II — Stack to Handle Forward Order
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