What if you could add important things instantly at the front without moving everything else?
Why Insert at Beginning of Doubly Linked List in DSA Typescript?
Imagine you have a list of tasks written on sticky notes lined up on your desk. You want to add a new urgent task right at the front so you see it first.
If you try to do this by rewriting the whole list every time, it becomes tiring and slow.
Manually moving all sticky notes one by one to make space at the front is slow and easy to mess up.
You might lose track of some tasks or place them in the wrong order.
Using a doubly linked list lets you add a new task at the front quickly by just changing a few pointers.
You don't have to move all the other tasks; the list updates itself smoothly.
let tasks = ['task1', 'task2', 'task3']; tasks = ['newTask', ...tasks];
class Node { data: string; prev: Node | null = null; next: Node | null = null; constructor(data: string) { this.data = data; } } class DoublyLinkedList { head: Node | null = null; insertAtBeginning(data: string) { const newNode = new Node(data); if (this.head) { newNode.next = this.head; this.head.prev = newNode; } this.head = newNode; } }
You can quickly add important items at the front of your list without disturbing the rest.
Adding a new high-priority email at the top of your inbox so you see it immediately.
Manual shifting of elements is slow and error-prone.
Doubly linked list insertion updates pointers to add at front efficiently.
This operation keeps the list organized and fast to update.
Practice
Solution
Step 1: Understand the head node position
The head node is the first node in the doubly linked list.Step 2: Insert new node before head
Inserting at the beginning means placing the new node before the current head, making it the new head.Final Answer:
To add a new node before the current head node -> Option DQuick Check:
Insert at beginning = add before head [OK]
- Confusing insertion at beginning with insertion at end
- Thinking insertion deletes nodes
- Mixing up head and tail nodes
Solution
Step 1: Set newNode.next to current head
The new node's next pointer should point to the current head node.Step 2: Update current head's prev to newNode if head exists
If the list is not empty, the current head's prev pointer must point back to the new node.Step 3: Update head to newNode
Finally, the head pointer is updated to the new node.Final Answer:
newNode.next = head; if(head) head.prev = newNode; head = newNode; -> Option AQuick Check:
Set newNode.next=head, head.prev=newNode, head=newNode [OK]
- Swapping next and prev pointers
- Not updating head pointer
- Setting newNode.prev incorrectly
class Node {
data: number;
next: Node | null = null;
prev: Node | null = null;
constructor(data: number) { this.data = data; }
}
let head: Node | null = new Node(10);
head.next = new Node(20);
head.next.prev = head;
const newNode = new Node(5);
newNode.next = head;
head.prev = newNode;
head = newNode;
// Print list
let temp = head;
const result: number[] = [];
while(temp) {
result.push(temp.data);
temp = temp.next;
}
console.log(result);Solution
Step 1: Initial list before insertion
List is 10 <-> 20, head points to 10.Step 2: Insert newNode with data 5 at beginning
newNode.next = head (10), head.prev = newNode, head = newNode (5).Step 3: Traverse list from new head
Traverse from 5: 5 -> 10 -> 20.Final Answer:
[5, 10, 20] -> Option AQuick Check:
New head 5 followed by 10 and 20 [OK]
- Not updating head to newNode
- Incorrectly linking prev pointers
- Printing list from old head
const newNode = new Node(15); newNode.prev = null; newNode.next = head; head.prev = newNode; head = newNode;
Solution
Step 1: Check if head is null before accessing head.prev
If the list is empty (head is null), accessing head.prev causes an error.Step 2: Add condition to update head.prev only if head exists
Use if(head) head.prev = newNode; to avoid runtime error.Final Answer:
Missing check if head is null before accessing head.prev -> Option BQuick Check:
Always check head before head.prev [OK]
- Ignoring null head and causing runtime error
- Swapping next and prev pointers
- Assigning head too early
Solution
Step 1: Insert new node with value 20 before current head 30
New node becomes head, its prev is null, next points to old head (30).Step 2: Update old head's prev to new node
Old head (30) prev pointer updated to new node (20).Step 3: Confirm list order and pointers
List order is 20 <-> 30 <-> 40 <-> 50 with new head prev=null, next=30.Final Answer:
List: 20 <-> 30 <-> 40 <-> 50; new head prev = null, next points to 30 -> Option CQuick Check:
New head prev=null, next=old head [OK]
- Setting new head prev to old tail
- Reversing list order accidentally
- Not updating old head prev pointer
Ready to prove it?
Pass the test and this pattern moves unknown
