What does it mean for a linked list to be circular?
A linked list is circular if its last node points back to one of the previous nodes instead of null, creating a loop.
Click to reveal answer
beginner
Which two pointers are commonly used to detect a circular linked list?
The slow pointer moves one step at a time, and the fast pointer moves two steps at a time. If they meet, the list is circular.
Click to reveal answer
intermediate
Why does the fast pointer catch up to the slow pointer in a circular linked list?
Because the fast pointer moves faster and the list loops, it eventually meets the slow pointer inside the loop.
Click to reveal answer
intermediate
What is the time complexity of detecting a circular linked list using the two-pointer method?
The time complexity is O(n), where n is the number of nodes, because each pointer moves through the list at most once.
Click to reveal answer
beginner
What should the fast pointer check to avoid errors during traversal?
The fast pointer should check if the next node or the node after next is null to avoid accessing undefined nodes.
Click to reveal answer
What does the fast pointer move in each step in the two-pointer cycle detection method?
AOne node ahead
BIt stays in place
CThree nodes ahead
DTwo nodes ahead
✗ Incorrect
The fast pointer moves two nodes ahead each step to catch the slow pointer if a cycle exists.
If a linked list is not circular, what will the fast pointer eventually reach?
AAn infinite loop
BThe slow pointer
CA null node
DThe head node again
✗ Incorrect
If the list is not circular, the fast pointer will reach a null node indicating the end.
What is the main idea behind using two pointers to detect a cycle?
AThey move at different speeds to detect loops
BThey both move one step to find the end
CThey count the number of nodes
DThey reverse the list
✗ Incorrect
Moving at different speeds helps detect if a loop exists by checking if pointers meet.
What should you do if the fast pointer or its next node is null during traversal?
AConclude the list is not circular
BContinue moving pointers
CRestart from the head
DThrow an error
✗ Incorrect
If fast pointer or next node is null, the list ends and is not circular.
Which of these is NOT a sign of a circular linked list?
AInfinite traversal possible
BLast node points to null
CFast and slow pointers meet
DLoop in node connections
✗ Incorrect
If the last node points to null, the list is not circular.
Explain how the two-pointer method detects a circular linked list.
Think about how different speeds help find loops.
You got /4 concepts.
Describe what happens when a linked list is circular and how it affects traversal.
Imagine walking in a circle instead of a straight path.
You got /4 concepts.
Practice
(1/5)
1. What does it mean if a linked list is circular?
easy
A. The linked list has only one node
B. The linked list has no nodes
C. The linked list nodes are sorted in ascending order
D. The last node points back to one of the previous nodes, forming a loop
Solution
Step 1: Understand linked list structure
A linked list is a chain of nodes where each node points to the next node.
Step 2: Define circular linked list
If the last node points back to any previous node, it creates a loop, making the list circular.
Final Answer:
The last node points back to one of the previous nodes, forming a loop -> Option D
Quick Check:
Circular linked list = last node points back [OK]
Hint: Circular means last node links back to earlier node [OK]
Common Mistakes:
Thinking circular means sorted list
Confusing empty list with circular list
Assuming single node list is always circular
2. Which of the following is the correct way to check if a linked list is circular in JavaScript?
easy
A. Count nodes and compare with array length
B. Use two pointers moving at different speeds and check if they meet
C. Check if head is null only
D. Sort the linked list nodes
Solution
Step 1: Understand Floyd's cycle detection
Use two pointers: slow moves one step, fast moves two steps. If they meet, list is circular.
Step 2: Eliminate wrong options
Checking head null only doesn't detect loops. Counting nodes or sorting is unrelated.
Final Answer:
Use two pointers moving at different speeds and check if they meet -> Option B
Quick Check:
Two-pointer cycle detection = correct method [OK]
Hint: Two pointers meeting means circular list [OK]
Common Mistakes:
Only checking if head is null
Trying to sort linked list to detect cycle
Counting nodes without loop detection
3. What will be the output of the following code snippet?
class Node {
constructor(value) {
this.value = value;
this.next = null;
}
}
const head = new Node(1);
const second = new Node(2);
const third = new Node(3);
head.next = second;
second.next = third;
third.next = second; // creates a loop
function isCircular(head) {
let slow = head;
let fast = head;
while (fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
if (slow === fast) return true;
}
return false;
}
console.log(isCircular(head));
medium
A. false
B. undefined
C. true
D. TypeError
Solution
Step 1: Analyze linked list structure
Nodes 1 -> 2 -> 3, and third node points back to second, creating a loop.
Step 2: Trace two-pointer loop detection
Slow and fast pointers will eventually meet inside the loop, so function returns true.
Final Answer:
true -> Option C
Quick Check:
Loop detected = true [OK]
Hint: Loop causes pointers to meet, returning true [OK]
Common Mistakes:
Assuming no loop because list looks linear
Confusing pointer equality check
Expecting false without tracing pointers
4. Find the error in this code that tries to detect a circular linked list:
function isCircular(head) {
let slow = head;
let fast = head;
while (fast.next && fast.next.next) {
slow = slow.next;
fast = fast.next.next;
if (slow == fast) return true;
}
return false;
}
medium
A. The while condition should check if fast and fast.next exist
B. The comparison should use === instead of ==
C. The slow pointer should move two steps instead of one
D. The function should return false inside the loop
Solution
Step 1: Check while loop condition safety
fast.next.next is accessed without confirming fast is not null, can cause error if fast is null.
Step 2: Correct condition to avoid runtime error
Condition should be while (fast && fast.next) to safely access fast.next.next.
Final Answer:
The while condition should check if fast and fast.next exist -> Option A
Quick Check:
Check fast and fast.next before accessing next nodes [OK]
Hint: Always check fast and fast.next before fast.next.next [OK]
Common Mistakes:
Not checking if fast is null before accessing fast.next.next
Using == instead of === (not critical here)
Moving slow pointer two steps incorrectly
5. Given a linked list where the last node points back to the head, how can you modify the detection function to also return the node where the loop starts?
function detectLoopStart(head) {
let slow = head;
let fast = head;
while (fast && fast.next) {
slow = slow.next;
fast = fast.next.next;
if (slow === fast) {
// Loop detected
slow = head;
while (slow !== fast) {
slow = slow.next;
fast = fast.next;
}
return slow;
}
}
return null;
}
hard
A. The function returns the node where the loop starts by resetting slow to head and moving both pointers one step
B. The function returns true if a loop exists but does not find the start node
C. The function incorrectly moves fast pointer one step after detection
D. The function will always return null because slow and fast never meet
Solution
Step 1: Detect loop using two pointers
Slow and fast pointers meet inside the loop confirming a cycle.
Step 2: Find loop start node
Reset slow to head, move slow and fast one step at a time until they meet again; this node is loop start.
Final Answer:
The function returns the node where the loop starts by resetting slow to head and moving both pointers one step -> Option A
Quick Check:
Reset slow and move both pointers to find loop start [OK]
Hint: Reset slow to head after detection to find loop start [OK]
Common Mistakes:
Returning true instead of loop start node
Moving fast pointer incorrectly after detection
Assuming slow and fast never meet
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.