Simulate elementary addition column by column using a dummy node. Maintain a carry variable, traverse both linked lists simultaneously, and append the sum modulo 10 to the result list while updating carry = sum // 10.
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
dummy = ListNode(0)
curr = dummy
carry = 0
while l1 or l2 or carry:
val1 = l1.val if l1 else 0
val2 = l2.val if l2 else 0
# Calculate sum and carry
val = val1 + val2 + carry
carry = val // 10
val = val % 10
# Update list
curr.next = ListNode(val)
curr = curr.next
# Advance pointers
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
return dummy.next
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(0);
ListNode curr = dummy;
int carry = 0;
while (l1 != null || l2 != null || carry != 0) {
int val1 = (l1 != null) ? l1.val : 0;
int val2 = (l2 != null) ? l2.val : 0;
int sum = val1 + val2 + carry;
carry = sum / 10;
curr.next = new ListNode(sum % 10);
curr = curr.next;
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
return dummy.next;
}
}