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 that each node points to its previous node instead of the next. We use three pointers: previous, current, and next to keep track while moving through the list.
Click to reveal answer
beginner
In the iterative reversal of a singly linked list, what role does the 'previous' pointer play?
The 'previous' pointer keeps track of the node that should come before the current node once the links are reversed. It starts as null because the new tail will point to null.
Click to reveal answer
beginner
Why do we need a 'next' pointer during the iterative reversal of a singly linked list?
Because once we change the current node's pointer to point backward, we lose the original next node. The 'next' pointer temporarily stores the original next node so we can continue traversing the list.
Click to reveal answer
beginner
What is the time complexity of reversing a singly linked list iteratively?
The time complexity is O(n), where n is the number of nodes. We visit each node exactly once to reverse the pointers.
Click to reveal answer
beginner
What will be the output linked list after reversing 1 -> 2 -> 3 -> null iteratively?
3 -> 2 -> 1 -> null
Click to reveal answer
Which pointer should initially be set to null when reversing a singly linked list iteratively?
Acurrent
Bprevious
Cnext
Dhead
✗ Incorrect
The 'previous' pointer starts as null because the new tail node will point to null after reversal.
What happens to the 'current' pointer during each iteration in the reversal process?
AIt moves to the next node
BIt becomes null immediately
CIt stays the same
DIt moves to the previous node
✗ Incorrect
The 'current' pointer moves forward to the next node stored in 'next' to continue traversal.
What is the final step after the loop finishes in iterative reversal?
AReturn the previous pointer as the new head
BReturn the original head
CReturn null
DReturn the next pointer
✗ Incorrect
After reversal, 'previous' points to the new head of the reversed list.
If the input list is empty (null), what should the reversal function return?
Aa new node
Ban error
Cthe original head
Dnull
✗ Incorrect
If the list is empty, the reversed list is also empty, so return null.
What is the space complexity of reversing a singly linked list iteratively?
AO(n)
BO(log n)
CO(1)
DO(n^2)
✗ Incorrect
The iterative reversal uses only 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.
You got /6 concepts.
Describe why we cannot reverse a singly linked list without using a temporary pointer to store the next node.
Consider what happens if you change a pointer without saving the next node.
You got /4 concepts.
Practice
(1/5)
1. What is the main purpose of reversing a singly linked list iteratively?
easy
A. To sort the list in ascending order
B. To delete all nodes from the list
C. To change the direction of all links so the last node becomes the first
D. To add a new node at the end of the list
Solution
Step 1: Understand the linked list structure
A singly linked list has nodes connected in one direction from head to tail.
Step 2: Purpose of reversing
Reversing changes the links so the last node points to the previous one, making it the new head.
Final Answer:
To change the direction of all links so the last node becomes the first -> Option C
Quick Check:
Reversing = changing link directions [OK]
Hint: Reversing flips the list direction, last becomes first [OK]
Common Mistakes:
Confusing reversing with sorting
Thinking reversing deletes nodes
Assuming reversing adds nodes
2. Which of the following is the correct way to initialize the previous pointer before starting the iterative reversal?
easy
A. Node prev = head;
B. Node prev = head.next;
C. Node prev = new Node();
D. Node prev = null;
Solution
Step 1: Understand the role of previous pointer
Previous pointer starts as null because the new tail's next should be null after reversal.
Step 2: Initialization
Setting prev to null ensures the first node processed points to null, ending the reversed list properly.
Final Answer:
Node prev = null; -> Option D
Quick Check:
Prev starts null to mark new tail [OK]
Hint: Prev pointer starts null to mark list end [OK]
Common Mistakes:
Initializing prev to head causes cycle
Creating new node wastes memory
Starting prev at head.next skips first node
3. What will be the output linked list after reversing the list 1 -> 2 -> 3 -> null iteratively?
medium
A. 1 -> 2 -> 3 -> null
B. 3 -> 2 -> 1 -> null
C. null -> 3 -> 2 -> 1
D. 2 -> 3 -> 1 -> null
Solution
Step 1: Trace the reversal process
Initially: 1 -> 2 -> 3 -> null. After reversal, links point backward: 3 -> 2 -> 1 -> null.
Step 2: Confirm final head and tail
Node 3 becomes new head, node 1 becomes tail pointing to null.
Final Answer:
3 -> 2 -> 1 -> null -> Option B
Quick Check:
Reversed list = 3 -> 2 -> 1 [OK]
Hint: Last node becomes first after reversal [OK]
Common Mistakes:
Assuming list stays same after reversal
Confusing null placement
Mixing node order
4. Identify the error in this iterative reversal code snippet:
Node prev = head;
Node current = head.next;
while (current != null) {
Node nextNode = current.next;
current.next = prev;
prev = current;
current = nextNode;
}
head.next = null;
head = prev;
medium
A. prev should be initialized to null, not head
B. current should start at head, not head.next
C. head.next should not be set to null
D. Loop condition should be current.next != null
Solution
Step 1: Check initialization of prev pointer
Prev must start as null to mark new tail's next as null after reversal.
Step 2: Effect of wrong initialization
Starting prev at head causes a cycle, breaking reversal logic.
Final Answer:
prev should be initialized to null, not head -> Option A
Quick Check:
Prev = null to avoid cycles [OK]
Hint: Prev must start null to avoid cycles [OK]
Common Mistakes:
Starting prev at head causes infinite loop
Wrong loop condition misses last node
Forgetting to set old head next to null
5. Given a singly linked list with nodes containing values 10 -> 20 -> 30 -> 40 -> null, which iterative code snippet correctly reverses it and prints the reversed list?
hard
A. Node prev = null;
Node current = head;
while (current != null) {
Node next = current.next;
current.next = prev;
prev = current;
current = next;
}
head = prev;
// Print list starting from head
B. Node prev = head;
Node current = head.next;
while (current != null) {
Node next = current.next;
current.next = prev;
prev = current;
current = next;
}
head = prev;
// Print list starting from head
C. Node current = head;
while (current != null) {
Node next = current.next;
current.next = null;
current = next;
}
// Print list starting from head
D. Node prev = null;
Node current = head;
while (current.next != null) {
Node next = current.next;
current.next = prev;
prev = current;
current = next;
}
head = prev;
// Print list starting from head
Solution
Step 1: Verify initialization of pointers
Prev must start as null, current at head to reverse all nodes correctly.
Step 2: Check loop condition and pointer updates
Loop runs while current != null to process all nodes; inside loop, links reversed properly.
Step 3: Confirm final head assignment and printing
After loop, head is set to prev (new head). Printing from head shows reversed list.
Final Answer:
Option A code correctly reverses and prints the list -> Option A
Quick Check:
Prev=null, loop full list, head=prev [OK]
Hint: Prev null, loop full list, head = prev after reversal [OK]