What if you could add new things to your list instantly without moving anything else?
Why Insert at Beginning Head Insert in DSA Go?
Imagine you have a list of tasks written on sticky notes lined up on your desk. You want to add a new urgent task at the very front, but you have to move all the other notes one by one to make space. This takes time and can cause mistakes.
Manually shifting all tasks to add one at the front is slow and tiring. You might drop or lose some notes, or place the new task in the wrong spot. This makes managing your list frustrating and error-prone.
Using the "Insert at Beginning" method, you can quickly add a new task at the front without moving others. You just link the new task to the current first one, making it the new head instantly. This saves time and avoids mistakes.
tasks := []string{"task1", "task2", "task3"}
// To add at front, shift all right (O(n) copy)
tasks = append([]string{"newTask"}, tasks...)type Node struct {
value string
next *Node
}
func insertAtBeginning(head *Node, newValue string) *Node {
newNode := &Node{value: newValue, next: head}
return newNode
}This method lets you add new items instantly at the front, making your list flexible and fast to update.
When managing a playlist, adding a new favorite song to play next is easy by inserting it at the beginning without rearranging the whole list.
Manual shifting is slow and risky.
Head insert links new node to front instantly.
Efficient for adding items at the start of a list.
Practice
Solution
Step 1: Understand the head pointer role
The head pointer points to the first node in the list.Step 2: Insert at beginning changes head
Inserting at beginning means creating a new node and making it the new head, linking it to the old head.Final Answer:
Adds a new node at the start of the list, making it the new head -> Option DQuick Check:
Insert at beginning = new head node [OK]
- Confusing insert at beginning with insert at end
- Thinking it deletes nodes
- Assuming it searches nodes
Solution
Step 1: Create new node pointing to current head
newNode is created with data 10 and next pointing to current head.Step 2: Update head to new node
Assign head to newNode so it becomes the first node.Final Answer:
newNode := &Node{data: 10, next: head}\nhead = newNode -> Option AQuick Check:
New node points to old head, head updated [OK]
- Not linking new node to old head
- Changing head.next instead of head
- Forgetting to update head pointer
package main
import "fmt"
type Node struct {
data int
next *Node
}
func main() {
head := &Node{data: 5, next: nil}
newNode := &Node{data: 3, next: head}
head = newNode
newNode2 := &Node{data: 1, next: head}
head = newNode2
// Print list
current := head
for current != nil {
fmt.Print(current.data, " -> ")
current = current.next
}
fmt.Print("null")
}Solution
Step 1: Insert 3 at beginning
New node with 3 points to 5, head updated to 3.Step 2: Insert 1 at beginning
New node with 1 points to 3, head updated to 1.Step 3: Print list from head
Traverse from head: 1 -> 3 -> 5 -> null.Final Answer:
1 -> 3 -> 5 -> null -> Option AQuick Check:
Head insert order reversed list [OK]
- Printing in insertion order instead of head order
- Confusing next pointers
- Not updating head after insert
type Node struct {
data int
next *Node
}
func insertAtBeginning(head *Node, val int) *Node {
newNode := &Node{data: val}
newNode.next = head.next
head = newNode
return head
}Solution
Step 1: Check newNode.next assignment
It incorrectly points to head.next instead of head, skipping the current head node.Step 2: Correct pointer to head
newNode.next must point to head to insert before it.Final Answer:
newNode.next should point to head, not head.next -> Option CQuick Check:
Link new node to head, not head.next [OK]
- Linking new node to head.next skipping head
- Not updating head pointer correctly
- Ignoring return value of updated head
Solution
Step 1: Understand insertion order at beginning
Inserting at beginning reverses order because new nodes become head.Step 2: Reverse input slice before inserting
Reversing input before inserting at beginning restores original order in final list.Final Answer:
Insert each new value at the beginning but reverse the input slice before inserting. -> Option BQuick Check:
Reverse input + head insert = original order [OK]
- Inserting at beginning without reversing input
- Inserting at end without reversing input
- Confusing insert at beginning with insert at end
Ready to prove it?
Pass the test and this pattern moves unknown
