Bird
Raised Fist0
DSA Pythonprogramming~10 mins

Add Two Numbers Represented as Linked List in DSA Python - Execution Trace

Choose your learning style10 modes available
Concept Flow - Add Two Numbers Represented as Linked List
Start with two linked lists
↓
Initialize carry = 0 and dummy head
↓
Traverse both lists simultaneously
↓
Add node values + carry
↓
Create new node with sum % 10
↓
Update carry = sum // 10
↓
Move to next nodes
↓
Repeat until both lists and carry are done
↓
Return list starting after dummy head
We add digits node by node from two lists, keep track of carry, and build a new list with the sum.
Execution Sample
DSA Python
def addTwoNumbers(l1, l2):
    carry = 0
    dummy = ListNode(0)
    current = dummy
    while l1 or l2 or carry:
        val1 = l1.val if l1 else 0
        val2 = l2.val if l2 else 0
        total = val1 + val2 + carry
        carry = total // 10
        current.next = ListNode(total % 10)
        current = current.next
        l1 = l1.next if l1 else None
        l2 = l2.next if l2 else None
    return dummy.next
This code adds two numbers represented by linked lists digit by digit, handling carry, and returns the sum as a linked list.
Execution Table
StepOperationl1 Nodel2 NodeSum (val1+val2+carry)CarryNew Node CreatedList State
1Add 2 + 5 + 0257077 -> null
2Add 4 + 6 + 04610107 -> 0 -> null
3Add 3 + 4 + 1348087 -> 0 -> 8 -> null
4l1 and l2 are None, carry 0NoneNone00None7 -> 0 -> 8 -> null
💡 Both lists are fully traversed and carry is zero, so addition ends.
Variable Tracker
VariableStartAfter Step 1After Step 2After Step 3Final
carry00100
l12 -> 4 -> 34 -> 33NoneNone
l25 -> 6 -> 46 -> 44NoneNone
current Nodedummy7088
Key Moments - 3 Insights
Why do we add carry to the sum each step?
Because the previous addition might have produced a carry (like 10 or more), which must be added to the next digit sum. See execution_table step 2 where carry is 1.
What happens when one list is shorter than the other?
We treat missing nodes as 0. For example, if l1 is None but l2 has nodes, val1 is 0. This is shown in variable_tracker where l1 becomes None but l2 still has nodes.
Why do we use a dummy head node?
It simplifies building the result list by avoiding special cases for the first node. The dummy's next points to the real head. See execution_table List State starting with '7 -> null'.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 2, what is the carry value after addition?
A1
B0
C2
DNone
💡 Hint
Check the 'Carry' column in execution_table row for step 2.
At which step does the sum of digits first exceed 9, causing a carry?
AStep 1
BStep 2
CStep 3
DNo step
💡 Hint
Look at the 'Sum' column in execution_table to find when sum is 10 or more.
If the first list was longer, how would the execution_table change?
ALess steps because l2 is shorter
BNo change, same steps
CMore steps with l2 Node as None and val2 = 0
DCarry would always be zero
💡 Hint
Refer to key_moments about handling different list lengths and variable_tracker showing l1 and l2 changes.
Concept Snapshot
Add Two Numbers as Linked Lists:
- Traverse both lists node by node
- Sum digits + carry
- Create new node with sum % 10
- Update carry = sum // 10
- Continue until both lists and carry are done
- Return list after dummy head
Full Transcript
We add two numbers represented as linked lists by traversing both lists at the same time. At each step, we add the digits from both lists plus any carry from the previous step. We create a new node with the digit part of the sum and update the carry for the next step. We continue until both lists are fully traversed and there is no carry left. A dummy head node helps simplify building the result list. This process handles different length lists by treating missing nodes as zero. The final linked list represents the sum of the two numbers.

Practice

(1/5)
1. What does the problem "Add Two Numbers Represented as Linked List" mainly involve?
easy
A. Adding two numbers where each digit is stored in a node of a linked list
B. Sorting two linked lists in ascending order
C. Finding the middle node of a linked list
D. Reversing a linked list

Solution

  1. Step 1: Understand the problem context

    The problem involves two linked lists where each node contains a single digit of a number, stored in reverse order.
  2. Step 2: Identify the main operation

    We need to add these two numbers digit by digit, handling carry, and return the sum as a linked list.
  3. Final Answer:

    Adding two numbers where each digit is stored in a node of a linked list -> Option A
  4. Quick Check:

    Adding digits node-wise = Adding numbers represented as linked lists [OK]
Hint: Focus on digit-wise addition with carry in linked lists [OK]
Common Mistakes:
  • Confusing addition with sorting
  • Thinking the digits are stored in normal order
  • Ignoring carry during addition
2. Which of the following is the correct way to create a node class for a singly linked list in Python for this problem?
easy
A. class Node: def __init__(self, val=0, next=None): self.val = val self.next = next
B. class Node: def __init__(self, val, next): val = self.val next = self.next
C. class Node: def __init__(self): self.value = 0 self.next = None
D. class Node: def __init__(self, val): self.val = val self.next = val

Solution

  1. Step 1: Check correct attribute assignment

    class Node: def __init__(self, val=0, next=None): self.val = val self.next = next correctly assigns the value and next pointer using self.val and self.next.
  2. Step 2: Verify default parameters and syntax

    class Node: def __init__(self, val=0, next=None): self.val = val self.next = next uses default values and proper syntax for linked list node creation.
  3. Final Answer:

    class Node: def __init__(self, val=0, next=None): self.val = val self.next = next -> Option A
  4. Quick Check:

    Correct node class syntax = class Node: def __init__(self, val=0, next=None): self.val = val self.next = next [OK]
Hint: Use self to assign attributes inside __init__ [OK]
Common Mistakes:
  • Reversing assignment order (val = self.val)
  • Forgetting to use self for attributes
  • Incorrect default parameters
3. What will be the output linked list after adding these two numbers represented as linked lists? List 1: 2 -> 4 -> 3 -> null (represents 342) List 2: 5 -> 6 -> 4 -> null (represents 465) Code snippet:
def addTwoNumbers(l1, l2):
    carry = 0
    dummy = Node(0)
    current = dummy
    while l1 or l2 or carry:
        val1 = l1.val if l1 else 0
        val2 = l2.val if l2 else 0
        total = val1 + val2 + carry
        carry = total // 10
        current.next = Node(total % 10)
        current = current.next
        if l1: l1 = l1.next
        if l2: l2 = l2.next
    return dummy.next
medium
A. 7 -> 10 -> 7 -> null
B. 8 -> 0 -> 7 -> null
C. 2 -> 0 -> 8 -> null
D. 7 -> 0 -> 8 -> null

Solution

  1. Step 1: Add digits with carry

    Adding 2+5=7 (carry 0), 4+6=10 (carry 1), 3+4+1=8 (carry 0).
  2. Step 2: Form the resulting linked list

    Digits are 7 -> 0 -> 8 representing 807, which is 342+465.
  3. Final Answer:

    7 -> 0 -> 8 -> null -> Option D
  4. Quick Check:

    342 + 465 = 807 = 7->0->8 [OK]
Hint: Add digits and carry, build new nodes for sum digits [OK]
Common Mistakes:
  • Not handling carry correctly
  • Mixing digit order in output
  • Adding digits without carry
4. Identify the bug in this code snippet for adding two numbers represented as linked lists:
def addTwoNumbers(l1, l2):
    carry = 0
    dummy = Node(0)
    current = dummy
    while l1 or l2:
        val1 = l1.val if l1 else 0
        val2 = l2.val if l2 else 0
        total = val1 + val2 + carry
        carry = total // 10
        current.next = Node(total % 10)
        current = current.next
        if l1: l1 = l1.next
        if l2: l2 = l2.next
    return dummy.next
medium
A. The initial dummy node is not created
B. The loop misses processing carry after both lists end
C. The nodes are not linked properly
D. The carry is not calculated correctly

Solution

  1. Step 1: Analyze loop condition

    The loop runs only while l1 or l2 exist, but if carry remains after both end, it is ignored.
  2. Step 2: Identify missing carry handling

    Carry should be checked in loop condition to add an extra node if needed.
  3. Final Answer:

    The loop misses processing carry after both lists end -> Option B
  4. Quick Check:

    Loop must include carry to avoid missing last digit [OK]
Hint: Include carry in loop condition to handle last digit [OK]
Common Mistakes:
  • Ignoring carry after lists end
  • Wrong loop condition
  • Not updating current pointer
5. Given two linked lists representing numbers in reverse order, how would you modify the addition function to handle numbers stored in forward order (most significant digit first)?
hard
A. Use recursion to add digits from head to tail without reversing
B. Add digits directly without reversing, starting from head
C. Reverse both lists, add as usual, then reverse the result
D. Convert lists to integers, add, then convert back to linked list

Solution

  1. Step 1: Understand digit order difference

    Forward order means most significant digit is at head, so addition must start from tail.
  2. Step 2: Reverse lists to reuse existing logic

    Reversing lists makes digits least significant first, allowing normal addition and then reversing result restores order.
  3. Final Answer:

    Reverse both lists, add as usual, then reverse the result -> Option C
  4. Quick Check:

    Reverse to handle forward order addition [OK]
Hint: Reverse lists to reuse reverse-order addition logic [OK]
Common Mistakes:
  • Adding digits from head without reversing
  • Ignoring digit order difference
  • Converting to int may cause overflow
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard