📖 Scenario: You are managing a circular linked list that represents a round-robin queue of tasks. Each task has a unique number. You want to add a new task at the beginning of this circular list so it gets priority.
🎯 Goal: Build a circular linked list and write code to insert a new node at the beginning. Then print the list to see the updated order.
📋 What You'll Learn
Create a circular linked list with three nodes having values 10, 20, and 30
Create a variable called newValue with the value 5
Write a function insertAtBeginning that inserts a new node with newValue at the start of the circular linked list
Print the circular linked list starting from the head node after insertion
💡 Why This Matters
🌍 Real World
Circular linked lists are used in real-time systems like task scheduling where the tasks repeat in a cycle. Inserting at the beginning can give priority to urgent tasks.
💼 Career
Understanding circular linked lists and insertion operations is important for software engineers working on operating systems, embedded systems, and game development where cyclic data structures are common.
Progress0 / 4 steps
1
Create initial circular linked list
Create a class called Node with a value number and a next pointer. Then create three nodes with values 10, 20, and 30. Link them in a circular way so the last node points back to the first node. Store the first node in a variable called head.
DSA Typescript
Hint
Remember to link the last node's next to the first node to make it circular.
2
Create new value to insert
Create a variable called newValue and set it to 5. This will be the value of the new node to insert at the beginning.
DSA Typescript
Hint
Just create a variable newValue and assign 5 to it.
3
Write function to insert at beginning
Write a function called insertAtBeginning that takes the current head node and a number value. It should create a new node with value and insert it at the start of the circular linked list. Return the new head node. Use the Node class and update links to keep the list circular.
DSA Typescript
Hint
Traverse to the last node, update its next to the new node, then point new node's next to old head. Return new node as new head.
4
Print circular linked list after insertion
Write code to print the circular linked list starting from newHead. Print each node's value separated by -> . Stop after printing all nodes once to avoid infinite loop.
DSA Typescript
Hint
Use a do-while loop to print nodes until you reach the start again.
Practice
(1/5)
1. What happens when you insert a new node at the beginning of a circular linked list?
easy
A. The new node replaces the last node in the list.
B. The new node is added at the end of the list, breaking the circular link.
C. The list becomes linear instead of circular.
D. The new node becomes the head and points to the old head, maintaining the circular link.
Solution
Step 1: Understand the circular linked list structure
A circular linked list has its last node pointing back to the head node, forming a circle.
Step 2: Insert new node at beginning
The new node is linked to the current head, and the last node's next pointer is updated to this new node, making it the new head.
Final Answer:
The new node becomes the head and points to the old head, maintaining the circular link. -> Option D
Quick Check:
New head points to old head, circle intact [OK]
Hint: New head points to old head; last node points to new head [OK]
Common Mistakes:
Forgetting to update last node's next pointer
Breaking the circular link by not connecting last node
Replacing the last node instead of adding new head
2. Which of the following TypeScript code snippets correctly inserts a new node at the beginning of a circular linked list?
easy
A. newNode.next = head; last.next = newNode; head = newNode;
B. head.next = newNode; newNode.next = last; last = newNode;
C. newNode.next = null; head = newNode; last.next = head;
D. last.next = head; head = newNode; newNode.next = last;
Solution
Step 1: Link new node to current head
newNode.next = head sets the new node's next pointer to the current head.
Step 2: Update last node's next pointer and head
last.next = newNode updates the last node to point to the new node, and head = newNode sets the new node as the head.
Final Answer:
newNode.next = head; last.next = newNode; head = newNode; -> Option A
Quick Check:
Correct pointer updates maintain circular list [OK]
Hint: Set newNode.next to head, update last.next, then head [OK]
Common Mistakes:
Setting newNode.next to null breaks circularity
Not updating last.next to newNode
Assigning head incorrectly before linking nodes
3. Given the following TypeScript code for inserting at the beginning of a circular linked list, what will be the printed list after insertion?
class Node {
data: number;
next: Node | null;
constructor(data: number) {
this.data = data;
this.next = null;
}
}
let head = new Node(10);
let second = new Node(20);
let third = new Node(30);
head.next = second;
second.next = third;
third.next = head; // circular link
let newNode = new Node(5);
// Insert at beginning
newNode.next = head;
third.next = newNode;
head = newNode;
// Print list
let temp = head;
do {
console.log(temp.data);
temp = temp.next!;
} while (temp !== head);
medium
A. 5 -> 10 -> 20 -> 30 (circular)
B. 5 -> 20 -> 30 -> 10 (circular)
C. 10 -> 20 -> 30 -> 5 (circular)
D. 5 -> 10 -> 20 -> 30 -> null
Solution
Step 1: Understand the initial circular list
Initial list is 10 -> 20 -> 30 -> back to 10 (circular).
Step 2: Insert new node with data 5 at beginning
newNode.next = head points 5 to 10; third.next = newNode points 30 to 5; head = newNode updates head to 5.
Step 3: Print traversal
Starting at head (5), traversal prints 5, 10, 20, 30, then stops as it loops back to 5.
Final Answer:
5 -> 10 -> 20 -> 30 (circular) -> Option A
Quick Check:
New head 5 leads list, circle intact [OK]
Hint: New node data first, then old nodes, circle stays [OK]
Common Mistakes:
Printing null at end instead of circular loop
Not updating last node's next pointer
Confusing order of nodes after insertion
4. Identify the error in this TypeScript code snippet that attempts to insert a node at the beginning of a circular linked list:
newNode.next = head;
head = newNode;
last.next = newNode;
medium
A. The last.next pointer is updated after changing head, causing incorrect link.
B. No error; code correctly inserts at beginning.
C. newNode.next should point to last instead of head.
D. head should be updated after last.next to maintain circularity.
Solution
Step 1: Analyze pointer updates order
newNode.next = head sets new node's next to old head correctly.
Step 2: Verify the updates
head = newNode updates head to new node. Then last.next = newNode correctly sets the last node's next to the new head since 'last' references the unchanged last node.
Step 3: Confirm circularity
The final structure is newHead -> oldHead -> ... -> last -> newHead, fully circular with no breaks.
Final Answer:
No error; code correctly inserts at beginning. -> Option B
Quick Check:
last reference stable, circle intact [OK]
Hint: last reference remains valid after head update [OK]
Common Mistakes:
Assuming changing head before last.next breaks circle
Not updating last.next at all
Pointing newNode.next incorrectly
5. You have a circular linked list with nodes containing values [15, 25, 35], where 35 points back to 15. You want to insert a new node with value 5 at the beginning. Which sequence of pointer updates correctly maintains the circular linked list?
hard
A. Set head = newNode; newNode.next = last; last.next = head;
B. Set head.next = newNode; newNode.next = last; last = newNode;
C. Set newNode.next = head; last.next = newNode; head = newNode;
D. Set newNode.next = last; head = newNode; last.next = newNode;
Solution
Step 1: Link new node to current head
newNode.next = head points the new node (5) to the current head (15).
Step 2: Update last node's next pointer
last.next = newNode updates the last node (35) to point to the new node (5), maintaining circularity.
Step 3: Update head pointer
head = newNode sets the new node as the head of the list.
Final Answer:
Set newNode.next = head; last.next = newNode; head = newNode; -> Option C
Quick Check:
New head points to old head; last points to new head [OK]
Hint: Link new node to head, last to new node, then update head [OK]
Common Mistakes:
Updating pointers in wrong order
Pointing newNode.next to last instead of head
Not updating last.next to newNode
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.