Bird
Raised Fist0
DSA Goprogramming~20 mins

Add Two Numbers Represented as Linked List in DSA Go - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Linked List Addition Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output after adding two linked lists representing numbers?
Given two linked lists where each node contains a single digit and the digits are stored in reverse order, what is the resulting linked list after adding them?
DSA Go
type ListNode struct {
    Val  int
    Next *ListNode
}

func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    dummy := &ListNode{}
    current := dummy
    carry := 0
    for l1 != nil || l2 != nil || carry != 0 {
        sum := carry
        if l1 != nil {
            sum += l1.Val
            l1 = l1.Next
        }
        if l2 != nil {
            sum += l2.Val
            l2 = l2.Next
        }
        carry = sum / 10
        current.Next = &ListNode{Val: sum % 10}
        current = current.Next
    }
    return dummy.Next
}

// Input lists:
// l1: 2 -> 4 -> 3 -> null (represents 342)
// l2: 5 -> 6 -> 4 -> null (represents 465)

// Call: addTwoNumbers(l1, l2)
A8 -> 0 -> 7 -> null
B7 -> 0 -> 7 -> null
C7 -> 1 -> 8 -> null
D7 -> 0 -> 8 -> null
Attempts:
2 left
💡 Hint
Add digits node by node, carry over if sum >= 10.
🧠 Conceptual
intermediate
1:30remaining
Why do we use a dummy node in the linked list addition?
In the function that adds two numbers represented by linked lists, why is a dummy node used at the start?
ATo simplify handling the head of the result list and avoid extra checks.
BTo reverse the input linked lists before addition.
CTo store the carry value during addition.
DTo keep track of the length of the linked lists.
Attempts:
2 left
💡 Hint
Think about how to easily add nodes to an initially empty list.
🔧 Debug
advanced
2:00remaining
What error occurs in this buggy linked list addition code?
Identify the error when running this code snippet for adding two numbers represented as linked lists.
DSA Go
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
    var head *ListNode
    var current *ListNode
    carry := 0
    for l1 != nil || l2 != nil {
        sum := carry
        if l1 != nil {
            sum += l1.Val
            l1 = l1.Next
        }
        if l2 != nil {
            sum += l2.Val
            l2 = l2.Next
        }
        carry = sum / 10
        node := &ListNode{Val: sum % 10}
        if head == nil {
            head = node
            current = node
        } else {
            current.Next = node
            current = current.Next
        }
    }
    if carry > 0 {
        current.Next = &ListNode{Val: carry}
    }
    return head
}

// Input lists:
// l1: 9 -> 9 -> null
// l2: 1 -> null

// Call: addTwoNumbers(l1, l2)
ACorrect output: 0 -> 0 -> 1 -> null
BPanic due to nil pointer dereference when carry > 0 and current is nil
CInfinite loop because l1 and l2 are not updated properly
DCompilation error due to missing return statement
Attempts:
2 left
💡 Hint
Check if the carry addition after the loop is safe.
❓ Predict Output
advanced
2:00remaining
What is the output when input lists have different lengths?
Given two linked lists representing numbers in reverse order, where one list is longer, what is the output after addition?
DSA Go
l1: 1 -> 8 -> null (represents 81)
l2: 0 -> 1 -> 6 -> null (represents 610)

// Using the standard addTwoNumbers function
A1 -> 8 -> 6 -> null
B1 -> 9 -> 6 -> null
C1 -> 9 -> 5 -> null
D1 -> 9 -> 7 -> null
Attempts:
2 left
💡 Hint
Add digits with carry, consider missing nodes as zero.
🧠 Conceptual
expert
1:30remaining
What is the time complexity of adding two numbers represented as linked lists?
Consider two linked lists representing numbers in reverse order. What is the time complexity of adding them using the standard approach?
AO(m * n) where m and n are the lengths of the two lists
BO(min(m, n)) where m and n are the lengths of the two lists
CO(max(m, n)) where m and n are the lengths of the two lists
DO(1) constant time
Attempts:
2 left
💡 Hint
Think about how many nodes you must visit to add all digits.

Practice

(1/5)
1. What does the problem "Add Two Numbers Represented as Linked List" ask you to do?
easy
A. Reverse the digits of a number stored in a linked list.
B. Multiply two numbers stored as linked lists and return the product as a linked list.
C. Add two numbers where each digit is stored in a node of a linked list, and return the sum as a linked list.
D. Find the maximum digit in a linked list representing a number.

Solution

  1. Step 1: Understand the problem statement and identify the expected output

    The problem requires adding two numbers where each number is represented by a linked list, with each node holding a single digit. The sum should also be returned as a linked list, where each node contains a digit of the result.
  2. Final Answer:

    Add two numbers represented as linked lists and return their sum as a linked list -> Option C
  3. Quick Check:

    Adding digits node by node = Add two numbers where each digit is stored in a node of a linked list, and return the sum as a linked list. [OK]
Hint: Focus on adding digit by digit with carry [OK]
Common Mistakes:
  • Confusing addition with multiplication
  • Ignoring carry over between digits
  • Returning a number instead of a linked list
2. Which of the following Go code snippets correctly defines a node for a singly linked list used to represent a digit in the "Add Two Numbers Represented as Linked List" problem?
easy
A. type ListNode struct { Val int; Next *ListNode }
B. type ListNode struct { Value string; Next ListNode }
C. type Node struct { Val int; Next int }
D. type ListNode struct { Val int; Next ListNode }

Solution

  1. Step 1: Check struct field types and verify pointer usage

    The node should hold an integer value and a pointer to the next node, so Val is int and Next is *ListNode. Next must be a pointer to ListNode to allow linking nodes dynamically.
  2. Final Answer:

    type ListNode struct { Val int; Next *ListNode } -> Option A
  3. Quick Check:

    Pointer to next node = type ListNode struct { Val int; Next *ListNode } [OK]
Hint: Use *ListNode for next pointer in Go structs [OK]
Common Mistakes:
  • Using value type instead of pointer for Next
  • Using wrong field types like string for digits
  • Missing semicolons or commas in struct
3. What will be the output linked list after adding the two numbers represented by these linked lists? List 1: 2 -> 4 -> 3 -> null (represents 342) List 2: 5 -> 6 -> 4 -> null (represents 465) Use the standard addition approach digit by digit with carry.
medium
A. 7 -> 0 -> 8 -> null
B. 8 -> 0 -> 7 -> null
C. 7 -> 10 -> 7 -> null
D. 7 -> 1 -> 8 -> null

Solution

  1. Step 1: Add digits from head nodes with carry and form the result linked list

    2 + 5 = 7, carry 0; next digits 4 + 6 = 10, store 0 carry 1; next digits 3 + 4 + 1 = 8. The result digits are 7 -> 0 -> 8 representing 807.
  2. Final Answer:

    7 -> 0 -> 8 -> null -> Option A
  3. Quick Check:

    342 + 465 = 807 = 7->0->8 [OK]
Hint: Add digits with carry, store remainder as node value [OK]
Common Mistakes:
  • Not carrying over when sum >= 10
  • Adding digits in wrong order
  • Confusing node values with actual number order
4. Consider this Go function snippet to add two numbers represented as linked lists. What is the bug? func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode { carry := 0 dummy := &ListNode{} current := dummy for l1 != nil && l2 != nil { sum := l1.Val + l2.Val + carry carry = sum / 10 current.Next = &ListNode{Val: sum % 10} current = current.Next l1 = l1.Next l2 = l2.Next } return dummy.Next }
medium
A. The dummy node is not initialized properly.
B. Carry is not calculated correctly after sum.
C. The function does not return the correct node.
D. The loop stops when either list ends, missing remaining nodes in longer list.

Solution

  1. Step 1: Analyze loop condition and identify missing processing

    The loop runs only while both l1 and l2 are not nil, so it stops if one list is longer. Remaining nodes in the longer list and any carry after loop are not handled, causing incorrect results.
  2. Final Answer:

    The loop stops when either list ends, missing remaining nodes in longer list -> Option D
  3. Quick Check:

    Loop condition misses longer list nodes = The loop stops when either list ends, missing remaining nodes in longer list. [OK]
Hint: Use OR condition to continue until both lists and carry are done [OK]
Common Mistakes:
  • Using AND instead of OR in loop condition
  • Ignoring leftover carry after loop
  • Not linking remaining nodes after loop
5. You have two linked lists representing numbers in reverse order: List 1: 9 -> 9 -> 9 -> 9 -> null (represents 9999) List 2: 1 -> null (represents 1) What will be the resulting linked list after adding these two numbers?
hard
A. 0 -> 0 -> 0 -> 0 -> null
B. 0 -> 0 -> 0 -> 0 -> 1 -> null
C. 1 -> 0 -> 0 -> 0 -> 0 -> null
D. 9 -> 9 -> 9 -> 10 -> null

Solution

  1. Step 1: Add digits with carry step-by-step and add final carry as new node

    9+1=10, store 0 carry 1; next 9+0+1=10, store 0 carry 1; repeat for all 9s, each time store 0 carry 1. After last 9, carry is 1, so add a new node with value 1 at the end.
  2. Final Answer:

    0 -> 0 -> 0 -> 0 -> 1 -> null -> Option B
  3. Quick Check:

    9999 + 1 = 10000 = 0->0->0->0->1 [OK]
Hint: Remember to add carry node if leftover after last digit [OK]
Common Mistakes:
  • Not adding extra node for leftover carry
  • Stopping addition too early
  • Misplacing the carry node in the list
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