Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Detect if a Linked List is Circular in DSA Javascript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
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
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
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
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
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
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

      1. Step 1: Understand linked list structure

        A linked list is a chain of nodes where each node points to the next node.
      2. Step 2: Define circular linked list

        If the last node points back to any previous node, it creates a loop, making the list circular.
      3. Final Answer:

        The last node points back to one of the previous nodes, forming a loop -> Option D
      4. 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

      1. Step 1: Understand Floyd's cycle detection

        Use two pointers: slow moves one step, fast moves two steps. If they meet, list is circular.
      2. Step 2: Eliminate wrong options

        Checking head null only doesn't detect loops. Counting nodes or sorting is unrelated.
      3. Final Answer:

        Use two pointers moving at different speeds and check if they meet -> Option B
      4. 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

      1. Step 1: Analyze linked list structure

        Nodes 1 -> 2 -> 3, and third node points back to second, creating a loop.
      2. Step 2: Trace two-pointer loop detection

        Slow and fast pointers will eventually meet inside the loop, so function returns true.
      3. Final Answer:

        true -> Option C
      4. 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

      1. 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.
      2. Step 2: Correct condition to avoid runtime error

        Condition should be while (fast && fast.next) to safely access fast.next.next.
      3. Final Answer:

        The while condition should check if fast and fast.next exist -> Option A
      4. 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

      1. Step 1: Detect loop using two pointers

        Slow and fast pointers meet inside the loop confirming a cycle.
      2. 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.
      3. Final Answer:

        The function returns the node where the loop starts by resetting slow to head and moving both pointers one step -> Option A
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard