📖 Scenario: You are building a simple circular singly linked list to manage a playlist of songs that loops back to the start after the last song.
🎯 Goal: Create a circular singly linked list with three nodes containing song names, link them in a circle, and print the list to show the circular structure.
📋 What You'll Learn
Create a Node class with value and next properties
Create three nodes with values 'Song1', 'Song2', and 'Song3'
Link the nodes so that the last node points back to the first node, forming a circle
Print the circular linked list starting from the head node, showing all nodes once
💡 Why This Matters
🌍 Real World
Circular linked lists are used in applications like music playlists, round-robin scheduling, and buffering where the list loops continuously.
💼 Career
Understanding circular linked lists helps in roles involving system design, game development, and real-time data processing where cyclic data structures are common.
Progress0 / 4 steps
1
Create Node class and three nodes
Create a class called Node with a constructor that takes value and sets this.value and this.next to null. Then create three nodes called node1, node2, and node3 with values 'Song1', 'Song2', and 'Song3' respectively.
DSA Javascript
Hint
Define the Node class first, then create three instances with the exact names and values.
2
Link nodes to form a circular list
Link the nodes by setting node1.next to node2, node2.next to node3, and node3.next to node1 to form a circle.
DSA Javascript
Hint
Set the next property of each node to the next node, and the last node back to the first.
3
Create a function to print the circular list
Create a function called printCircularList that takes a head node and prints the values of the nodes in the circular list once, separated by -> . Use a do-while loop to traverse until you reach the head again.
DSA Javascript
Hint
Use a do-while loop to print each node's value until you circle back to the head.
4
Print the circular linked list
Call the function printCircularList with node1 as the argument to print the circular linked list.
DSA Javascript
Hint
Call printCircularList(node1) to see the circular list printed.
Practice
(1/5)
1. What is a key characteristic of a circular singly linked list compared to a regular singly linked list?
easy
A. The last node points back to the first node, forming a circle.
B. Each node has two pointers, one to the next and one to the previous node.
C. It stores data in a sorted order automatically.
D. It uses an array internally to store nodes.
Solution
Step 1: Understand the structure of a circular singly linked list
In a circular singly linked list, the last node's next pointer points back to the first node, creating a loop.
Step 2: Compare with other linked lists
Unlike doubly linked lists, circular singly linked lists have only one pointer per node and form a circle, not a linear chain.
Final Answer:
The last node points back to the first node, forming a circle. -> Option A
Quick Check:
Last node's next = first node [OK]
Hint: Remember: circular means last node links to first [OK]
Common Mistakes:
Confusing circular singly linked list with doubly linked list
Thinking nodes have two pointers
Assuming data is sorted automatically
2. Which of the following is the correct way to initialize an empty circular singly linked list in JavaScript?
easy
A. const head = { data: null, next: head };
B. const head = null; // no nodes yet
C. const head = { data: null, next: null };
D. const head = []; // empty array
Solution
Step 1: Understand empty list initialization
An empty circular singly linked list has no nodes, so the head pointer is null.
Step 2: Check other options
const head = { data: null, next: null }; creates a node with null data and next pointer, which is not empty. const head = { data: null, next: head }; references head before assignment, causing error. const head = []; // empty array uses an array, not a linked list.
Final Answer:
const head = null; // no nodes yet -> Option B
Quick Check:
Empty list head = null [OK]
Hint: Empty list means head is null, no nodes created [OK]
Common Mistakes:
Creating a node with null data instead of null head
Referencing head before declaration
Using arrays instead of linked list nodes
3. What will be the output of the following code snippet that creates a circular singly linked list with nodes 1, 2, 3 and prints the list once?
class Node {
constructor(data) {
this.data = data;
this.next = null;
}
}
class CircularSinglyLinkedList {
constructor() {
this.head = null;
}
append(data) {
const newNode = new Node(data);
if (!this.head) {
this.head = newNode;
newNode.next = this.head;
} else {
let temp = this.head;
while (temp.next !== this.head) {
temp = temp.next;
}
temp.next = newNode;
newNode.next = this.head;
}
}
printList() {
if (!this.head) return '';
let result = '';
let temp = this.head;
do {
result += temp.data + ' -> ';
temp = temp.next;
} while (temp !== this.head);
result += 'null';
return result;
}
}
const list = new CircularSinglyLinkedList();
list.append(1);
list.append(2);
list.append(3);
console.log(list.printList());
medium
A. null
B. 1 -> 2 -> 3 -> 1 -> 2 -> 3 -> null
C. 1 -> 2 -> 3
D. 1 -> 2 -> 3 -> null
Solution
Step 1: Understand append method behavior
Each new node is added at the end, and its next points to head, maintaining circularity.
Step 2: Trace printList method
printList starts at head and loops until it reaches head again, appending data with ' -> '. Finally adds 'null'. So output is '1 -> 2 -> 3 -> null'.
Final Answer:
1 -> 2 -> 3 -> null -> Option D
Quick Check:
Print once around circle = 1 -> 2 -> 3 -> null [OK]
Hint: Print loops until back to head once, then stops [OK]
Common Mistakes:
Printing infinite loop by not stopping at head
Missing 'null' at end
Printing nodes multiple times
4. Identify the bug in this code snippet that tries to append a node to a circular singly linked list:
append(data) {
const newNode = new Node(data);
if (!this.head) {
this.head = newNode;
newNode.next = null;
} else {
let temp = this.head;
while (temp.next !== this.head) {
temp = temp.next;
}
temp.next = newNode;
newNode.next = this.head;
}
}
medium
A. newNode.next should point to this.head when list is empty, not null.
B. The while loop condition should be temp.next === this.head.
C. The head should be set to newNode every time a node is appended.
D. The newNode should not be created inside the append method.
Solution
Step 1: Check initialization for empty list
When list is empty, newNode.next must point to head itself to maintain circularity, not null.
Step 2: Verify loop and pointer updates
The while loop and pointer updates are correct; only the initial next pointer is wrong.
Final Answer:
newNode.next should point to this.head when list is empty, not null. -> Option A
Quick Check:
Empty list node next = head, not null [OK]
Hint: Empty list node next must loop to itself [OK]
Common Mistakes:
Setting newNode.next to null breaks circular link
Wrong while loop condition
Resetting head incorrectly
5. You want to insert a new node with value 4 after the node with value 3 in a circular singly linked list. Given the list: 3 -> 1 -> 2 -> (back to 3), which code snippet correctly performs this insertion?
hard
A. let temp = head;
while (temp.next !== head) {
temp = temp.next;
}
const newNode = new Node(4);
temp.next = newNode;
newNode.next = head;
B. const newNode = new Node(4);
newNode.next = head;
head.next = newNode;
C. let temp = head;
while (temp.data !== 3) {
temp = temp.next;
}
const newNode = new Node(4);
newNode.next = temp.next;
temp.next = newNode;
D. head = new Node(4);
head.next = oldHead;
Solution
Step 1: Locate node with value 3
Traverse from head until temp.data equals 3 to find the correct insertion point.
Step 2: Insert new node after node 3
Create newNode with data 4, set newNode.next to temp.next, then set temp.next to newNode to insert correctly.
Final Answer:
Traverse from head until finding node with value 3, then insert new node after it. -> Option C
Quick Check:
Insert after node 3 by adjusting pointers [OK]
Hint: Find node 3, insert new node by pointer swap [OK]
Common Mistakes:
Inserting at wrong position
Not updating pointers correctly
Replacing head incorrectly
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.