Bird
Raised Fist0
DSA Goprogramming~5 mins

Insert at Beginning Head Insert in DSA Go - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Insert at Beginning Head Insert
O(1)
Understanding Time Complexity

We want to understand how long it takes to add a new item at the start of a linked list.

How does the time needed change as the list grows?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


// Insert a new node at the beginning of the list
func InsertAtBeginning(head *Node, val int) *Node {
    newNode := &Node{value: val}
    newNode.next = head
    head = newNode
    return head
}
    

This code creates a new node and places it at the start of the linked list.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Creating a new node and updating pointers.
  • How many times: This happens once per insertion, no loops or traversals.
How Execution Grows With Input

Adding a node at the start always takes the same steps, no matter how big the list is.

Input Size (n)Approx. Operations
103 steps (create node, set next, update head)
1003 steps (same as above)
10003 steps (still the same)

Pattern observation: The number of steps stays constant regardless of list size.

Final Time Complexity

Time Complexity: O(1)

This means adding at the beginning takes the same short time no matter how big the list is.

Common Mistake

[X] Wrong: "Adding at the start takes longer as the list grows because we have to move all nodes."

[OK] Correct: We only change a few pointers; we do not move or visit other nodes.

Interview Connect

Knowing that inserting at the head is quick helps you choose the right method for fast updates in linked lists.

Self-Check

"What if we changed to insert at the end of the list instead? How would the time complexity change?"

Practice

(1/5)
1. What does the "Insert at Beginning" operation do in a singly linked list?
easy
A. Adds a new node at the end of the list
B. Searches for a node at the beginning
C. Deletes the first node of the list
D. Adds a new node at the start of the list, making it the new head

Solution

  1. Step 1: Understand the head pointer role

    The head pointer points to the first node in the list.
  2. 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.
  3. Final Answer:

    Adds a new node at the start of the list, making it the new head -> Option D
  4. Quick Check:

    Insert at beginning = new head node [OK]
Hint: New node becomes head, old head moves next [OK]
Common Mistakes:
  • Confusing insert at beginning with insert at end
  • Thinking it deletes nodes
  • Assuming it searches nodes
2. Which of the following Go code snippets correctly inserts a new node with value 10 at the beginning of a singly linked list?
easy
A. newNode := &Node{data: 10, next: head} head = newNode
B. head.next = &Node{data: 10} head = head.next
C. newNode := &Node{data: 10} head.next = newNode
D. head = &Node{data: 10} head.next = nil

Solution

  1. Step 1: Create new node pointing to current head

    newNode is created with data 10 and next pointing to current head.
  2. Step 2: Update head to new node

    Assign head to newNode so it becomes the first node.
  3. Final Answer:

    newNode := &Node{data: 10, next: head}\nhead = newNode -> Option A
  4. Quick Check:

    New node points to old head, head updated [OK]
Hint: New node's next = old head; head = new node [OK]
Common Mistakes:
  • Not linking new node to old head
  • Changing head.next instead of head
  • Forgetting to update head pointer
3. What will be the output linked list after executing this Go code snippet?
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")
}
medium
A. 1 -> 3 -> 5 -> null
B. 5 -> 3 -> 1 -> null
C. 3 -> 1 -> 5 -> null
D. null

Solution

  1. Step 1: Insert 3 at beginning

    New node with 3 points to 5, head updated to 3.
  2. Step 2: Insert 1 at beginning

    New node with 1 points to 3, head updated to 1.
  3. Step 3: Print list from head

    Traverse from head: 1 -> 3 -> 5 -> null.
  4. Final Answer:

    1 -> 3 -> 5 -> null -> Option A
  5. Quick Check:

    Head insert order reversed list [OK]
Hint: New nodes become head, so list order reverses insert order [OK]
Common Mistakes:
  • Printing in insertion order instead of head order
  • Confusing next pointers
  • Not updating head after insert
4. Identify the error in this Go code that tries to insert a new node with value 7 at the beginning of a linked list:
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
}
medium
A. The function should not return head
B. head should not be reassigned inside the function
C. newNode.next should point to head, not head.next
D. newNode is not initialized correctly

Solution

  1. Step 1: Check newNode.next assignment

    It incorrectly points to head.next instead of head, skipping the current head node.
  2. Step 2: Correct pointer to head

    newNode.next must point to head to insert before it.
  3. Final Answer:

    newNode.next should point to head, not head.next -> Option C
  4. Quick Check:

    Link new node to head, not head.next [OK]
Hint: New node's next = head, not head.next [OK]
Common Mistakes:
  • Linking new node to head.next skipping head
  • Not updating head pointer correctly
  • Ignoring return value of updated head
5. Given a singly linked list with nodes containing integer values, write a Go function to insert multiple values at the beginning in order, so the final list reflects the insertion order. Which approach correctly achieves this?
hard
A. Insert each new value at the end one by one.
B. Insert each new value at the beginning but reverse the input slice before inserting.
C. Insert each new value at the beginning one by one.
D. Insert each new value at the end but reverse the input slice before inserting.

Solution

  1. Step 1: Understand insertion order at beginning

    Inserting at beginning reverses order because new nodes become head.
  2. Step 2: Reverse input slice before inserting

    Reversing input before inserting at beginning restores original order in final list.
  3. Final Answer:

    Insert each new value at the beginning but reverse the input slice before inserting. -> Option B
  4. Quick Check:

    Reverse input + head insert = original order [OK]
Hint: Reverse input before head inserts to keep order [OK]
Common Mistakes:
  • Inserting at beginning without reversing input
  • Inserting at end without reversing input
  • Confusing insert at beginning with insert at end
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard