Insert at Beginning Head Insert in DSA C++ - Time & Space 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?
Analyze the time complexity of the following code snippet.
struct Node {
int data;
Node* next;
};
void insertAtBeginning(Node*& head, int value) {
Node* newNode = new Node();
newNode->data = value;
newNode->next = head;
head = newNode;
}
This code adds a new node at the start of a linked list by adjusting pointers.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Creating and linking one new node.
- How many times: Exactly once per insertion, no loops or recursion.
Adding a node at the start takes the same steps no matter how big the list is.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 4 steps (create node, assign data, link, update head) |
| 100 | 4 steps (same as above) |
| 1000 | 4 steps (same as above) |
Pattern observation: The number of steps stays the same regardless of list size.
Time Complexity: O(1)
This means adding at the start always takes the same short time, no matter how big the list is.
[X] Wrong: "Adding at the start takes longer as the list grows because the list is bigger."
[OK] Correct: We only change a few pointers at the start, so the list size does not affect the time.
Knowing that head insertion is quick helps you choose the right method when speed matters.
"What if we had to insert at the end of the list instead? How would the time complexity change?"
Practice
Solution
Step 1: Understand the operation
Inserting at the beginning means placing a new node before the current head.Step 2: Effect on the list
The new node becomes the head, and its next pointer points to the old head.Final Answer:
Adds a new node at the start of the list, making it the new head -> Option CQuick Check:
Insert at beginning = new head [OK]
- Confusing insert at beginning with insert at end
- Thinking it deletes nodes
- Assuming it searches instead of inserts
Solution
Step 1: Link new node to current head
Set newNode->next to point to the current head node.Step 2: Update head to new node
Assign head to newNode so it becomes the new first node.Final Answer:
newNode->next = head; head = newNode; -> Option BQuick Check:
Link then update head [OK]
- Updating head before linking newNode->next
- Swapping pointers incorrectly
- Assigning newNode to head->next
struct Node { int data; Node* next; };
Node* head = nullptr;
Node* newNode = new Node{10, nullptr};
newNode->next = head;
head = newNode;
newNode = new Node{20, nullptr};
newNode->next = head;
head = newNode;Print the list from head to end.
Solution
Step 1: Insert first node with data 10
head points to node with 10, next is nullptr.Step 2: Insert second node with data 20 at beginning
newNode->next = head (node 10), head = newNode (node 20).Final Answer:
20 -> 10 -> null -> Option AQuick Check:
Last inserted node is head [OK]
- Assuming order is insertion order instead of reversed
- Confusing next pointers
- Ignoring nullptr termination
Node* newNode = new Node(); newNode->data = 5; head = newNode; newNode->next = head;
Solution
Step 1: Check pointer assignments order
Assigning head = newNode before setting newNode->next causes newNode->next to point to itself.Step 2: Correct order
newNode->next should be set to current head before updating head to newNode.Final Answer:
newNode->next should be assigned before head is updated -> Option DQuick Check:
Link newNode->next before head update [OK]
- Updating head before linking newNode->next
- Forgetting to initialize newNode->data
- Assuming no error in pointer assignments
Solution
Step 1: Insert first 40 at beginning
New head is 40, next points to old head 30.Step 2: Insert second 40 at beginning
New head is another 40, next points to previous 40 node.Final Answer:
40 -> 40 -> 30 -> 20 -> 10 -> null -> Option AQuick Check:
Each insert adds new head [OK]
- Assuming duplicate nodes merge
- Inserting at end instead of beginning
- Losing track of next pointers
Ready to prove it?
Pass the test and this pattern moves unknown
