Bird
Raised Fist0
DSA Typescriptprogramming~30 mins

Add Two Numbers Represented as Linked List in DSA Typescript - Build from Scratch

Choose your learning style10 modes available
Add Two Numbers Represented as Linked List
📖 Scenario: You are working on a simple calculator app that adds two numbers. These numbers are stored in a special way: each digit is a node in a linked list, and the digits are in reverse order. For example, the number 123 is stored as 3 -> 2 -> 1 -> null.Your task is to add two such numbers and return the sum as a linked list in the same reversed format.
🎯 Goal: Build a TypeScript program that creates two linked lists representing numbers, adds them digit by digit, and prints the resulting linked list showing the sum.
📋 What You'll Learn
Create two linked lists representing the numbers 342 and 465 respectively.
Create a helper variable to store the carry during addition.
Write the logic to add the two linked lists digit by digit, handling carry.
Print the resulting linked list showing the sum in the format: digit -> digit -> digit -> null.
💡 Why This Matters
🌍 Real World
Adding numbers stored as linked lists is useful in systems where numbers are too large to fit in standard data types or when digits arrive in streams.
💼 Career
Understanding linked list operations and digit-by-digit addition is important for software engineers working on low-level data processing, embedded systems, or coding interviews.
Progress0 / 4 steps
1
Create two linked lists representing numbers
Create a class called ListNode with a val number property and a next property that can be another ListNode or null. Then create two linked lists called l1 and l2 representing the numbers 342 and 465 respectively. The digits should be stored in reverse order, so l1 should be 2 -> 4 -> 3 -> null and l2 should be 5 -> 6 -> 4 -> null.
DSA Typescript
Hint

Remember to define the ListNode class first. Then create l1 and l2 by linking nodes with the digits in reverse order.

2
Create a carry variable for addition
Create a variable called carry and set it to 0. This will hold the carry value when adding digits.
DSA Typescript
Hint

The carry starts at zero because we have not added any digits yet.

3
Add the two linked lists digit by digit
Create a new linked list called dummyHead with value 0. Use a variable current to track the last node in the result list, starting at dummyHead. Use two variables p and q to traverse l1 and l2 respectively. While p or q is not null, add their values plus carry. Create a new node with the digit part of the sum and update carry with the carry part. Move p, q, and current forward accordingly. After the loop, if carry is greater than 0, add a new node with carry.
DSA Typescript
Hint

Use a dummy head to simplify adding nodes. Add digits and carry, then create new nodes for the result. Move pointers forward carefully.

4
Print the resulting linked list
Create a variable result and set it to dummyHead.next. Use a while loop to traverse result and print each node's value followed by ->. After the loop, print null to show the end of the list.
DSA Typescript
Hint

Traverse the result linked list and print each value followed by '->'. End with 'null' to show the list end.

Practice

(1/5)
1. What does the problem "Add Two Numbers Represented as Linked List" ask you to do?
easy
A. Find the difference between two numbers stored as strings.
B. Add two numbers where each digit is stored in a node of a linked list, and return the sum as a linked list.
C. Sort two linked lists and merge them into one sorted list.
D. Multiply two numbers stored in arrays and return the product as an array.

Solution

  1. Step 1: Understand the input format

    The numbers are given as linked lists where each node contains a single digit, and digits are stored in reverse order.
  2. Step 2: Understand the required output

    You must add these two numbers digit by digit and return the sum as a linked list in the same reversed format.
  3. Final Answer:

    Add two numbers digit-wise from linked lists and return sum as linked list -> Option B
  4. Quick Check:

    Adding digits node by node = Add two numbers as linked lists [OK]
Hint: Add digits node by node with carry, return linked list [OK]
Common Mistakes:
  • Confusing input format as normal integers
  • Returning sum as integer instead of linked list
  • Ignoring carry over digits
2. Which TypeScript code snippet correctly defines a node for a singly linked list used in this problem?
easy
A. class ListNode { val: number; next: ListNode | null; constructor(val?: number, next?: ListNode | null) { this.val = val ?? 0; this.next = next ?? null; } }
B. interface ListNode { value: string; next: ListNode; }
C. type ListNode = { val: string; next: ListNode | undefined; };
D. function ListNode(val) { this.val = val; this.next = null; }

Solution

  1. Step 1: Check for correct TypeScript class syntax

    class ListNode { val: number; next: ListNode | null; constructor(val?: number, next?: ListNode | null) { this.val = val ?? 0; this.next = next ?? null; } } defines a class with val as number and next as ListNode or null, with a constructor and default values.
  2. Step 2: Verify other options

    interface ListNode { value: string; next: ListNode; } uses interface with string type and no null for next, type ListNode = { val: string; next: ListNode | undefined; }; uses string val and next possibly undefined, function ListNode(val) { this.val = val; this.next = null; } is JavaScript function style without types.
  3. Final Answer:

    TypeScript class with number val and nullable next -> Option A
  4. Quick Check:

    TypeScript class with number val and nullable next = class ListNode { val: number; next: ListNode | null; constructor(val?: number, next?: ListNode | null) { this.val = val ?? 0; this.next = next ?? null; } } [OK]
Hint: Use class with val:number and next: ListNode|null [OK]
Common Mistakes:
  • Using string instead of number for val
  • Not allowing next to be null
  • Using JavaScript function instead of TypeScript class
3. What is 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 method for linked lists.
medium
A. 7 -> 10 -> 7 -> null
B. 8 -> 0 -> 7 -> null
C. 7 -> 0 -> 8 -> null
D. 2 -> 0 -> 8 -> null

Solution

  1. Step 1: Add digits node by node with carry

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

    Digits are 7, 0 (from 10), and 8, so linked list is 7 -> 0 -> 8 -> null
  3. Final Answer:

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

    342 + 465 = 807 represented as 7->0->8 [OK]
Hint: Add digits with carry, store remainder in node [OK]
Common Mistakes:
  • Not carrying over when sum >= 10
  • Reversing the order of digits in output
  • Adding digits incorrectly without carry
4. Given this TypeScript function to add two numbers as linked lists, what is the bug?
function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {
  let dummy = new ListNode(0);
  let current = dummy;
  let carry = 0;
  while (l1 !== null && l2 !== null) {
    let sum = l1.val + l2.val + carry;
    carry = Math.floor(sum / 10);
    current.next = new ListNode(sum % 10);
    current = current.next;
    l1 = l1.next;
    l2 = l2.next;
  }
  return dummy.next;
}
medium
A. Carry is not calculated correctly using Math.floor.
B. The function returns dummy instead of dummy.next.
C. Dummy node is not initialized properly.
D. The loop stops when either list ends, missing remaining nodes in longer list.

Solution

  1. Step 1: Analyze the while loop condition

    The loop runs only while both l1 and l2 are not null, so it stops if one list is longer.
  2. Step 2: Identify missing handling of remaining nodes

    After the loop, remaining nodes of the longer list and any carry are not processed, causing incorrect result.
  3. Final Answer:

    Loop stops too early, missing remaining nodes in longer list -> Option D
  4. Quick Check:

    Loop condition && misses longer list nodes [OK]
Hint: Use || in loop to handle different length lists [OK]
Common Mistakes:
  • Using && instead of || in loop condition
  • Not processing leftover carry after loop
  • Returning dummy instead of dummy.next
5. You have two linked lists representing numbers: List 1: 9 -> 9 -> 9 -> 9 -> null (9999) and List 2: 1 -> null (1). What is the correct resulting linked list after adding them?
hard
A. 0 -> 0 -> 0 -> 0 -> 1 -> null
B. 1 -> 0 -> 0 -> 0 -> 0 -> null
C. 0 -> 0 -> 0 -> 0 -> null
D. 9 -> 9 -> 9 -> 10 -> null

Solution

  1. Step 1: Add digits with carry from right to left

    9+1=10 (0 carry 1), next 9+0+1=10 (0 carry 1), repeat for next two 9s with carry 1.
  2. Step 2: Add final carry as new node

    After last 9+0+1=10, carry 1 remains, so add new node with 1 at the end.
  3. Final Answer:

    0 -> 0 -> 0 -> 0 -> 1 -> null -> Option A
  4. Quick Check:

    9999 + 1 = 10000 as linked list 0->0->0->0->1 [OK]
Hint: Add carry after last node if needed [OK]
Common Mistakes:
  • Not adding extra node for final carry
  • Stopping addition early when one list ends
  • Incorrectly placing carry node position
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