📖 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
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.
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.
Final Answer:
Add two numbers digit-wise from linked lists and return sum as linked list -> Option B
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
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.
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.
Final Answer:
TypeScript class with number val and nullable next -> Option A
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
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)
Step 2: Form the resulting linked list
Digits are 7, 0 (from 10), and 8, so linked list is 7 -> 0 -> 8 -> null
Final Answer:
7 -> 0 -> 8 -> null -> Option C
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
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.
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.
Final Answer:
Loop stops too early, missing remaining nodes in longer list -> Option D
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
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.
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.
Final Answer:
0 -> 0 -> 0 -> 0 -> 1 -> null -> Option A
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 unknownstrongwhile earning +1 Grip toward your certificate.