📖 Scenario: You are working with a simple list of tasks represented as a singly linked list. Sometimes, you want to see the tasks in reverse order to plan your day backward.
🎯 Goal: Build a program that creates a singly linked list of tasks, then reverses the list using an iterative method, and finally prints the reversed list.
📋 What You'll Learn
Create a singly linked list with exactly these tasks in order: "Wake up", "Brush teeth", "Eat breakfast", "Go to work"
Add a variable to help reverse the list iteratively
Write the iterative logic to reverse the singly linked list
Print the reversed list in the format: Task1 -> Task2 -> Task3 -> Task4 -> null
💡 Why This Matters
🌍 Real World
Reversing linked lists is useful in many applications like undo operations, navigation history, and task scheduling where order needs to be reversed.
💼 Career
Understanding linked list reversal is a common interview question and fundamental for software engineers working with data structures.
Progress0 / 4 steps
1
Create the Singly Linked List
Define a struct called Node with fields task string and next *Node. Then create four nodes with tasks "Wake up", "Brush teeth", "Eat breakfast", and "Go to work" linked in that order. Finally, create a variable head pointing to the first node.
DSA Go
Hint
Start by defining the Node struct. Then create nodes from last to first so you can link them easily.
2
Add Variables for Reversal
Add two variables var prev *Node and current *Node and set current = head. These will help you reverse the list iteratively.
DSA Go
Hint
Initialize prev as nil and current as head to start reversal.
3
Reverse the Linked List Iteratively
Write a for loop that runs while current != nil. Inside the loop, save current.next in nextNode, then set current.next = prev. Move prev to current and current to nextNode. After the loop, set head = prev.
DSA Go
Hint
Remember to save the next node before changing links, then move pointers forward.
4
Print the Reversed Linked List
Write a for loop to traverse the reversed list starting from head. Print each task followed by " -> ". After the loop, print "null" to show the end of the list.
DSA Go
Hint
Use a loop to print each task followed by " -> ". After the loop, print "null" to mark the end.
Practice
(1/5)
1. What is the main purpose of the iterative method to reverse a singly linked list?
easy
A. To sort the linked list in ascending order
B. To create a new linked list with reversed elements
C. To delete all nodes and recreate them in reverse order
D. To change the direction of the links between nodes one by one
Solution
Step 1: Understand the linked list structure
A singly linked list has nodes pointing to the next node only, so reversing means changing these pointers.
Step 2: Purpose of iterative reversal
The iterative method changes the next pointer of each node to point to the previous node, reversing the list in place.
Final Answer:
To change the direction of the links between nodes one by one -> Option D
Quick Check:
Reversing means changing links direction [OK]
Hint: Reversing means flipping links, not creating new nodes [OK]
Common Mistakes:
Thinking it creates a new list instead of reversing in place
Confusing reversal with sorting
Assuming nodes are deleted and recreated
2. Which of the following Go code snippets correctly initializes pointers for iterative reversal of a singly linked list?
easy
A. var prev = head; current := nil
B. var prev *Node = nil; current := head
C. prev := head; current := head.next
D. var prev *Node = head; current := head
Solution
Step 1: Initialization for reversal
We start with prev as nil because the new tail will point to nil, and current at head to traverse the list.
Step 2: Check each option
var prev *Node = nil; current := head correctly sets prev to nil and current to head. Others incorrectly assign prev or current.
Final Answer:
var prev *Node = nil; current := head -> Option B
Quick Check:
Prev starts nil, current at head [OK]
Hint: Prev starts nil, current starts at head [OK]
Common Mistakes:
Setting prev to head initially
Setting current to nil at start
Mixing pointer assignments
3. What will be the output linked list after running this Go code to reverse a singly linked list?
type Node struct {
Val int
Next *Node
}
func reverseList(head *Node) *Node {
var prev *Node = nil
current := head
for current != nil {
nextTemp := current.Next
current.Next = prev
prev = current
current = nextTemp
}
return prev
}
// Input list: 1 -> 2 -> 3 -> nil
// Call: reverseList(head)
medium
A. 3 -> 2 -> 1 -> nil
B. 1 -> 2 -> 3 -> nil
C. nil -> 3 -> 2 -> 1
D. 3 -> 1 -> 2 -> nil
Solution
Step 1: Trace the reversal loop
Initially prev=nil, current=1. Each iteration reverses current.Next to prev and moves pointers forward.
Step 2: Final reversed list
After loop, prev points to node with Val=3, linked as 3->2->1->nil.
Final Answer:
3 -> 2 -> 1 -> nil -> Option A
Quick Check:
Reversed list order is 3,2,1 [OK]
Hint: Follow pointer changes step-by-step [OK]
Common Mistakes:
Confusing original and reversed order
Misunderstanding pointer updates
Assuming list remains unchanged
4. Identify the error in this Go code snippet for reversing a singly linked list iteratively:
func reverseList(head *Node) *Node {
var prev *Node = head
current := head
for current != nil {
nextTemp := current.Next
current.Next = prev
prev = current
current = nextTemp
}
return prev
}
medium
A. prev should be initialized to nil, not head
B. current should be initialized to nil
C. nextTemp should be initialized outside the loop
D. The function should return current, not prev
Solution
Step 1: Check initialization of prev
Prev must start as nil because the new tail's next is nil. Setting prev=head causes a cycle.
Step 2: Effect of wrong prev initialization
Setting prev=head makes current.Next point to itself on first iteration, causing infinite loop or wrong reversal.
Final Answer:
prev should be initialized to nil, not head -> Option A
Quick Check:
Prev starts nil to avoid cycles [OK]
Hint: Prev must start nil to break old links [OK]
Common Mistakes:
Initializing prev to head causing cycles
Returning current instead of prev
Misplacing nextTemp initialization
5. Given a singly linked list with nodes containing values 10 -> 20 -> 30 -> 40 -> nil, write the final linked list after applying iterative reversal twice in a row.