Skip to main content

Inserting a Node in Linked List

Problem Statement:​

  • Example:



🧩 Insert at Head​

SinglyLinkedListNode* insertNodeAtHead(SinglyLinkedListNode* llist, int data) {
// Create a new node with given data
SinglyLinkedListNode *temp = new SinglyLinkedListNode(data);

// Point new node to current head
temp->next = llist;

// New node becomes the new head
return temp;
}


🧩 Insert at Tail​

SinglyLinkedListNode* insertNodeAtTail(SinglyLinkedListNode* head, int data) {
// Create a new node
SinglyLinkedListNode *temp = new SinglyLinkedListNode(data);

// If list is empty, return new node as head
if(head == NULL){
return temp;
}

// Traverse to the last node
SinglyLinkedListNode *curr = head;
while(curr->next != NULL){
curr = curr->next;
}

// Attach new node at the end
curr->next = temp;

return head;
}


🧩 Insert at Given Position (0-based index)​

SinglyLinkedListNode* insertNodeAtPosition(SinglyLinkedListNode* llist, int data, int position) {
// Create new node
SinglyLinkedListNode *temp = new SinglyLinkedListNode(data);

// Special case: inserting at head
if(position == 0){
temp->next = llist;
return temp;
}

// Traverse to position - 1
SinglyLinkedListNode *curr = llist;
int count = 0;
while(count + 1 != position){
curr = curr->next;
count++;
}

// Insert node at position
temp->next = curr->next;
curr->next = temp;

return llist;
}


📝 How It Works​

  • Insert at Head: Attach the new node before the current head.
  • Insert at Tail: Traverse to the end and attach the new node.
  • Insert at Position: Traverse to the node just before the given index and update pointers.

🧩 Key Logic​

  • Head Insertion: temp->next = llist;
  • Tail Insertion: Traverse until curr->next == NULL
  • Position Insertion: Stop at position - 1, link the node in between.

⏱️ Time & Space Complexity​

OperationTime ComplexitySpace Complexity
Insert at HeadO(1)O(1)
Insert at TailO(N)O(1)
Insert at PositionO(P)O(1)

Where P is the position index.


⚠️ Edge Cases​

  • Insert at position 0 → handle as head insertion.
  • Insertion into an empty list.
  • Position out of bounds → should be validated in real-world code (not done here).

💡 Other Approaches​

AlternativeWhen to Use
Use dummy head nodeSimplifies insertion/deletion logic
Doubly Linked ListIf backward traversal is needed
Circular ListWhen list loops back to head

  • Reverse a Linked List
  • Delete Node at Given Position
  • Detect Cycle in Linked List
  • Merge Two Sorted Linked Lists
🚀 Level Up Your Engineering Mindset

Never Study in Isolation. Join Binary Dose.

Connect with fellow engineers, clear conceptual doubts, and get 2 visual breakdowns & engineering mental models daily across our community channels.

Discord
Official Hub

Discord Community

Start at #welcome-and-rules, say hello in #general-chat, clear doubts, and collaborate with engineers worldwide.

Join Discord Server→
⚡
Daily Knowledge Drops

Daily Visual Deep-Dives

Bite-sized system design schematics, core OS internals, and DSA intuition served right into your feeds every single day.

💡Have handwritten notes, cheat-sheets, or want to publish a technical article?
Learn How to Contribute→