/
Add Two Numbers
Approach
Walk both lists simultaneously, adding corresponding digits plus carry.
Create a result node for each digit sum modulo 10 and propagate carry. Continue while either list has nodes or carry remains.
Converting lists to integers fails for very large numbers. Digit-by-digit addition handles arbitrary length.
Time Complexity: O(max(m, n))
Space Complexity: O(max(m, n)) for the output list
Code
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
dummy = ListNode()
curr = dummy
carry = 0
while l1 or l2 or carry:
val = carry
if l1:
val += l1.val
l1 = l1.next
if l2:
val += l2.val
l2 = l2.next
carry, digit = divmod(val, 10)
curr.next = ListNode(digit)
curr = curr.next
return dummy.next