Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

Traversal of Circular Linked List in DSA Typescript - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Traversal of Circular Linked List
O(n)
Understanding Time Complexity

We want to understand how long it takes to go through all items in a circular linked list.

How does the time needed change as the list gets bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


function traverseCircularList(head: Node | null): void {
  if (!head) return;
  let current = head;
  do {
    console.log(current.value);
    current = current.next;
  } while (current !== head);
}
    

This code visits each node in a circular linked list exactly once, starting from the head.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: The do-while loop that visits each node once.
  • How many times: Exactly once per node, until it returns to the start.
How Execution Grows With Input

As the list grows, the number of steps grows directly with the number of nodes.

Input Size (n)Approx. Operations
10About 10 visits
100About 100 visits
1000About 1000 visits

Pattern observation: The time grows in a straight line with the number of nodes.

Final Time Complexity

Time Complexity: O(n)

This means the time to traverse grows directly with the number of nodes in the list.

Common Mistake

[X] Wrong: "Because the list loops back, traversal might take forever or more than n steps."

[OK] Correct: The loop stops once it returns to the start node, so each node is visited only once.

Interview Connect

Understanding traversal time helps you explain how to handle circular lists safely and efficiently in real projects.

Self-Check

"What if the list had a cycle but no clear head node? How would the time complexity change?"

Practice

(1/5)
1. What is the main difference between a circular linked list and a regular singly linked list?
easy
A. In a circular linked list, nodes cannot be traversed.
B. In a circular linked list, nodes have two pointers instead of one.
C. In a circular linked list, nodes are stored in an array.
D. In a circular linked list, the last node points back to the first node.

Solution

  1. Step 1: Understand linked list types

    A regular singly linked list ends with a node pointing to null, while a circular linked list connects the last node back to the first node.
  2. Step 2: Identify the key difference

    This connection makes the list circular, allowing traversal to loop indefinitely.
  3. Final Answer:

    In a circular linked list, the last node points back to the first node. -> Option D
  4. Quick Check:

    Circular linked list loops back = A [OK]
Hint: Last node points to first in circular lists [OK]
Common Mistakes:
  • Thinking circular lists have two pointers per node
  • Confusing circular list with doubly linked list
  • Assuming nodes are stored in arrays
2. Which of the following is the correct way to start traversing a circular linked list in TypeScript?
easy
A. let current = head; do { /* process current */ current = current.next; } while(current !== head);
B. let current = head; while(current !== null) { /* process current */ current = current.next; }
C. for(let i = 0; i < length; i++) { /* process node */ }
D. let current = head; while(current.next !== null) { /* process current */ current = current.next; }

Solution

  1. Step 1: Understand traversal of circular linked list

    Traversal must start at head and continue until we return to head again, using a do-while loop to ensure at least one iteration.
  2. Step 2: Check each option

    let current = head; do { /* process current */ current = current.next; } while(current !== head); uses do-while with condition current !== head, which correctly traverses all nodes once. Others either check for null (wrong for circular) or use for loop without node references.
  3. Final Answer:

    let current = head; do { /* process current */ current = current.next; } while(current !== head); -> Option A
  4. Quick Check:

    Use do-while until back to head [OK]
Hint: Use do-while loop until current equals head [OK]
Common Mistakes:
  • Using while loop with null condition in circular list
  • Using for loop without node references
  • Stopping traversal too early
3. What will be the output of the following TypeScript code that traverses a circular linked list with nodes containing values 10, 20, 30?
class Node {
  value: number;
  next: Node | null;
  constructor(value: number) {
    this.value = value;
    this.next = null;
  }
}

const n1 = new Node(10);
const n2 = new Node(20);
const n3 = new Node(30);
n1.next = n2;
n2.next = n3;
n3.next = n1; // circular link

let current = n1;
do {
  console.log(current.value);
  current = current.next!;
} while (current !== n1);
medium
A. 20 30 10
B. 10 20 30 10
C. 10 20 30
D. 10 20

Solution

  1. Step 1: Understand the circular linked list structure

    Nodes are linked as 10 -> 20 -> 30 -> back to 10, forming a circle.
  2. Step 2: Trace the traversal loop

    Starting at n1 (10), the do-while prints 10, moves to 20, prints 20, moves to 30, prints 30, then moves back to 10. Loop stops because current === n1.
  3. Final Answer:

    10 20 30 -> Option C
  4. Quick Check:

    Print nodes once until back to start [OK]
Hint: Print nodes until current equals head once [OK]
Common Mistakes:
  • Printing the first node twice
  • Stopping traversal before last node
  • Confusing circular with linear traversal
4. Identify the error in this TypeScript code snippet for traversing a circular linked list:
let current = head;
while (current !== head) {
  console.log(current.value);
  current = current.next!;
}
medium
A. The code skips the first node during traversal.
B. The loop never runs because current equals head initially.
C. The code throws a null pointer exception.
D. The loop runs infinitely because condition is always true.

Solution

  1. Step 1: Analyze the loop condition

    The while loop condition is current !== head, but current starts as head, so condition is false immediately.
  2. Step 2: Understand loop execution

    Since condition is false at start, loop body never executes, so no nodes are processed.
  3. Final Answer:

    The loop never runs because current equals head initially. -> Option B
  4. Quick Check:

    While loop with current !== head fails at start [OK]
Hint: Use do-while to include first node in circular traversal [OK]
Common Mistakes:
  • Using while instead of do-while for circular lists
  • Assuming loop runs at least once
  • Not checking initial condition carefully
5. Given a circular linked list where each node contains a number, write a TypeScript function to find the sum of all node values. Which approach correctly handles the circular nature without infinite loops?
hard
A. Use a do-while loop starting at head, add values, stop when current equals head again.
B. Use a while loop checking current !== null, add values until null is reached.
C. Use a for loop with fixed iterations equal to list length, add values each iteration.
D. Use recursion without a base case to sum nodes.

Solution

  1. Step 1: Understand circular list traversal for summation

    Since the list is circular, traversal must stop when we return to the starting node to avoid infinite loops.
  2. Step 2: Evaluate each approach

    Use a do-while loop starting at head, add values, stop when current equals head again. uses a do-while loop starting at head and stops when current equals head again, correctly summing all nodes once. Use a while loop checking current !== null, add values until null is reached. checks for null which never occurs in circular lists. Use a for loop with fixed iterations equal to list length, add values each iteration. requires knowing length, which may not be available. Use recursion without a base case to sum nodes. causes infinite recursion.
  3. Final Answer:

    Use a do-while loop starting at head, add values, stop when current equals head again. -> Option A
  4. Quick Check:

    Do-while loop with stop at head = C [OK]
Hint: Stop traversal when current equals head to avoid infinite loop [OK]
Common Mistakes:
  • Using null check in circular list traversal
  • Recursing without base case causing stack overflow
  • Assuming list length is always known
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