← Back to Leo Academy Masterclass

Problem #2: Add Two Numbers

Medium Linked List

Intuition & Strategy Breakdown

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.

Python Solution

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

Java Solution

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;
    }
}
Watch Interactive Video on Leo Academy Main App