What is the main idea behind reversing a singly linked list iteratively?
We change the direction of each node's pointer one by one, so the list points backward instead of forward.
Click to reveal answer
beginner
In the iterative reversal of a singly linked list, which pointers do we typically use?
We use three pointers: previous (starts as null), current (starts at head), and next (to store current's next node).
Click to reveal answer
beginner
Why do we need to store the next node before changing the current node's pointer?
Because once we reverse the pointer, we lose the original next node reference, so we save it first to continue traversal.
Click to reveal answer
beginner
What is the time complexity of reversing a singly linked list iteratively?
It is O(n), where n is the number of nodes, because we visit each node exactly once.
Click to reveal answer
beginner
Show the final state of the list after reversing: 1 -> 2 -> 3 -> null
After reversal, the list becomes: 3 -> 2 -> 1 -> null
Click to reveal answer
Which pointer starts as null in the iterative reversal of a singly linked list?
Aprevious
Bcurrent
Cnext
Dhead
✗ Incorrect
The 'previous' pointer starts as null because the new tail of the reversed list will point to null.
What do we do first inside the loop when reversing a singly linked list iteratively?
AMove current to next
BSet current's next to previous
CSave current's next node
DMove previous to current
✗ Incorrect
We first save current's next node to not lose the rest of the list before changing pointers.
What happens to the head pointer after the list is reversed iteratively?
AIt remains the same
BIt points to the original tail node
CIt becomes null
DIt points to the second node
✗ Incorrect
After reversal, the head points to the original tail, which becomes the new head.
How many times do we visit each node during iterative reversal?
AOnce
BTwice
CThree times
DZero times
✗ Incorrect
Each node is visited exactly once to reverse its pointer.
What is the space complexity of iterative reversal of a singly linked list?
AO(log n)
BO(n)
CO(n^2)
DO(1)
✗ Incorrect
We only use a few pointers, so space complexity is constant O(1).
Explain step-by-step how to reverse a singly linked list using iteration.
Think about how pointers move and change direction one by one.
You got /8 concepts.
Describe the changes in pointers during the first iteration of reversing the list 1 -> 2 -> 3 -> null.
Focus on what happens to the first node's pointer.
You got /6 concepts.
Practice
(1/5)
1. What is the main purpose of reversing a singly linked list iteratively?
easy
A. To sort the linked list in ascending order
B. To change the direction of the links between nodes without using recursion
C. To delete all nodes from the linked list
D. To find the middle node of the linked list
Solution
Step 1: Understand the operation of reversing
Reversing a singly linked list means changing the direction of the next pointers so the last node becomes the first.
Step 2: Identify iterative approach
The iterative method changes links step-by-step using a loop without recursion.
Final Answer:
To change the direction of the links between nodes without using recursion -> Option B
Quick Check:
Reversing iteratively = changing links direction without recursion [OK]
Hint: Reversing means flipping links, not sorting or deleting [OK]
Common Mistakes:
Confusing reversing with sorting
Thinking recursion is required
Assuming nodes are deleted
2. Which of the following TypeScript code snippets correctly initializes pointers for iterative reversal of a singly linked list?
easy
A. let prev = null; let current = head;
B. let prev = head; let current = null;
C. let prev = head; let current = head.next;
D. let prev = null; let current = null;
Solution
Step 1: Understand pointer roles
Prev starts as null because the new tail points to null; current starts at head to traverse.
Step 2: Match initialization
Only let prev = null; let current = head; sets prev to null and current to head correctly for iteration.
Final Answer:
let prev = null; let current = head; -> Option A
Quick Check:
Prev null, current head = correct start [OK]
Hint: Prev starts null, current starts at head for iteration [OK]
Common Mistakes:
Setting prev to head initially
Starting current as null
Both pointers null at start
3. Given the linked list: 1 -> 2 -> 3 -> null, what will be the output after running this iterative reversal code?
function reverseList(head: ListNode | null): ListNode | null {
let prev = null;
let current = head;
while (current !== null) {
let nextTemp = current.next;
current.next = prev;
prev = current;
current = nextTemp;
}
return prev;
}
medium
A. null
B. 1 -> 2 -> 3 -> null
C. 3 -> 2 -> 1 -> null
D. 1 -> null
Solution
Step 1: Trace the reversal loop
Initially prev=null, current=1. Each iteration reverses current.next to prev and moves pointers forward.
Step 2: Final reversed list
After loop, prev points to node 3, which links to 2, then 1, then null.
Final Answer:
3 -> 2 -> 1 -> null -> Option C
Quick Check:
Reversed list = 3 -> 2 -> 1 -> null [OK]
Hint: Follow pointers step-by-step to see reversed links [OK]
Common Mistakes:
Returning head instead of prev
Not updating current correctly
Confusing next pointer updates
4. Identify the error in this iterative reversal code snippet:
function reverseList(head: ListNode | null): ListNode | null {
let prev = head;
let current = head.next;
while (current !== null) {
let nextTemp = current.next;
current.next = prev;
prev = current;
current = nextTemp;
}
return prev;
}
medium
A. current should start at head, not head.next
B. The function should return current instead of prev
C. nextTemp should be assigned after updating current.next
D. prev should be initialized to null, not head
Solution
Step 1: Check pointer initialization
Prev must start as null because the new tail points to null, not head.
Step 2: Understand impact of wrong initialization
Starting prev at head causes a cycle or incorrect reversal.
Final Answer:
prev should be initialized to null, not head -> Option D
Quick Check:
Prev must be null at start [OK]
Hint: Prev always null at start to avoid cycles [OK]
Common Mistakes:
Starting prev at head causing loops
Starting current at wrong node
Returning wrong pointer
5. You have a singly linked list with nodes containing values: 10 -> 20 -> 30 -> 40 -> null. After reversing it iteratively, you want to insert a new node with value 25 between 20 and 30 in the reversed list. What will be the correct order of nodes after insertion?