Bird
Raised Fist0
DSA Javaprogramming~10 mins

Traversal of Circular Linked List in DSA Java - Execution Trace

Choose your learning style10 modes available
Concept Flow - Traversal of Circular Linked List
Start at head node
↓
Process current node data
↓
Move to next node
↓
Check if current == head?
No→Repeat processing
Yes↓
Stop traversal
Start at the head node, visit each node once by moving to next, stop when you return to head.
Execution Sample
DSA Java
Node current = head;
do {
    System.out.print(current.data + " -> ");
    current = current.next;
} while (current != head);
System.out.print("null");
Traverse the circular linked list starting from head, printing each node's data until back at head.
Execution Table
StepOperationCurrent Node DataPointer ChangesVisual State
1Start at head10current = head (10)10 -> ? (circular)
2Print data10None10 -> ? (circular)
3Move to next20current = current.next (20)10 -> 20 -> ? (circular)
4Print data20None10 -> 20 -> ? (circular)
5Move to next30current = current.next (30)10 -> 20 -> 30 -> ? (circular)
6Print data30None10 -> 20 -> 30 -> ? (circular)
7Move to next10current = current.next (10)10 -> 20 -> 30 -> ? (circular)
8Check current == head?10 == 10YesTraversal ends
9Print nullnullNoneTraversal complete
💡 Traversal stops when current node returns to head node.
Variable Tracker
VariableStartAfter Step 3After Step 5After Step 7Final
currenthead (10)203010Traversal ends
Key Moments - 3 Insights
Why do we use a do-while loop instead of a while loop?
Because we must process the head node before checking if we returned to it. See execution_table steps 1-3 where data at head is printed before the condition check at step 8.
What happens if the list has only one node?
The traversal prints that single node once and stops immediately after returning to head, as the condition current == head becomes true after first move. This is implied by the check at step 8.
Why does traversal stop when current equals head?
Because in a circular list, returning to head means all nodes have been visited once. See step 8 in execution_table where current == head triggers traversal end.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of current after step 5?
A30
B20
C10
Dnull
💡 Hint
Check the 'Pointer Changes' and 'Current Node Data' columns at step 5.
At which step does the traversal check if current equals head?
AStep 3
BStep 6
CStep 8
DStep 9
💡 Hint
Look for the step with 'Check current == head?' operation in execution_table.
If the list had only one node, how many times would the data print before traversal ends?
A0 times
B1 time
C2 times
DInfinite times
💡 Hint
Refer to key_moments about single node list behavior and do-while loop usage.
Concept Snapshot
Traversal of Circular Linked List:
- Start at head node
- Use do-while loop to visit nodes
- Print current node data
- Move to next node
- Stop when current returns to head
- Ensures each node visited exactly once
Full Transcript
Traversal of a circular linked list starts at the head node. We print the data of the current node, then move to the next node. Because the list is circular, we stop when we return to the head node again. This is done using a do-while loop to ensure the head node is processed before the stopping condition is checked. The traversal prints each node's data exactly once, then ends by printing null.

Practice

(1/5)
1. What is the main difference between traversing a circular linked list and a singly linked list?
easy
A. In a singly linked list, traversal stops when the starting node is reached again.
B. In a circular linked list, traversal stops when the last node's next is null.
C. Traversal is the same for both lists.
D. In a circular linked list, traversal stops when the starting node is reached again.

Solution

  1. Step 1: Understand traversal stopping condition for singly linked list

    Traversal stops when the next pointer is null, indicating the end of the list.
  2. Step 2: Understand traversal stopping condition for circular linked list

    Traversal stops when the traversal reaches the starting node again, since the list loops back.
  3. Final Answer:

    In a circular linked list, traversal stops when the starting node is reached again. -> Option D
  4. Quick Check:

    Stopping condition differs: null vs start node [OK]
Hint: Remember circular lists loop back to start node [OK]
Common Mistakes:
  • Stopping traversal at null in circular list
  • Confusing stopping conditions between list types
  • Assuming circular list ends with null pointer
2. Which of the following Java code snippets correctly starts traversal of a circular linked list from the head node?
easy
A. Node current = head; do { System.out.println(current.data); current = current.next; } while(current != head);
B. Node current = head; while(current != null) { System.out.println(current.data); current = current.next; }
C. Node current = head.next; while(current != head) { System.out.println(current.data); current = current.next; }
D. Node current = null; do { System.out.println(current.data); current = current.next; } while(current != head);

Solution

  1. Step 1: Check initialization and loop condition

    Node current = head; do { System.out.println(current.data); current = current.next; } while(current != head); initializes current to head and uses a do-while loop to print and move until current equals head again, which is correct for circular lists.
  2. Step 2: Analyze other options

    Node current = head; while(current != null) { System.out.println(current.data); current = current.next; } uses while(current != null), which is incorrect for circular lists as next is never null. Node current = head.next; while(current != head) { System.out.println(current.data); current = current.next; } starts from head.next and misses printing head data. Node current = null; do { System.out.println(current.data); current = current.next; } while(current != head); initializes current to null, causing NullPointerException.
  3. Final Answer:

    Node current = head; do { System.out.println(current.data); current = current.next; } while(current != head); -> Option A
  4. Quick Check:

    Use do-while with current != head [OK]
Hint: Use do-while loop starting at head for circular lists [OK]
Common Mistakes:
  • Using while(current != null) for circular lists
  • Starting traversal from head.next and missing head node
  • Initializing current to null causing errors
3. What will be the output of the following code snippet for a circular linked list with nodes containing data 10 -> 20 -> 30 -> back to 10?
Node head = new Node(10);
head.next = new Node(20);
head.next.next = new Node(30);
head.next.next.next = head;

Node current = head;
do {
    System.out.print(current.data + " ");
    current = current.next;
} while(current != head);
medium
A. 10 20 30 10
B. 10 20 30
C. 20 30 10
D. 10 20 30 30

Solution

  1. Step 1: Understand the circular linked list structure

    The list nodes are 10 -> 20 -> 30, and 30 points back to 10, making it circular.
  2. Step 2: Trace the do-while loop output

    Starting at head (10), print 10, move to 20, print 20, move to 30, print 30, move to 10 again. Loop stops when current == head, so 10 is not printed again.
  3. Final Answer:

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

    Print nodes once until back to start [OK]
Hint: Do-while prints all nodes once before stopping [OK]
Common Mistakes:
  • Printing the start node twice
  • Missing the first node in output
  • Printing extra nodes beyond the loop
4. Identify the error in the following code snippet for traversing a circular linked list:
Node current = head;
while(current != head) {
    System.out.print(current.data + " ");
    current = current.next;
}
medium
A. The loop never executes because current == head initially.
B. The loop causes infinite printing of nodes.
C. The code throws NullPointerException.
D. The loop skips the last node.

Solution

  1. Step 1: Analyze loop condition with initial current value

    current is initialized to head, so current != head is false at start, loop body never runs.
  2. Step 2: Understand correct loop for circular list traversal

    Use do-while loop to ensure at least one iteration, since current starts at head.
  3. Final Answer:

    The loop never executes because current == head initially. -> Option A
  4. Quick Check:

    while(current != head) false at start [OK]
Hint: Use do-while to run loop at least once [OK]
Common Mistakes:
  • Using while instead of do-while for circular lists
  • Not printing the first node
  • Assuming loop runs when condition false initially
5. Given a circular linked list where each node contains an integer, write a method to find the sum of all node values. Which approach below correctly handles the traversal without infinite loop?
hard
A. Initialize sum=0; Node current=head.next; while(current != head) { sum += current.data; current = current.next; } return sum;
B. Initialize sum=0; Node current=head; while(current != null) { sum += current.data; current = current.next; } return sum;
C. Initialize sum=0; Node current=head; do { sum += current.data; current = current.next; } while(current != head); return sum;
D. Initialize sum=0; Node current=null; do { sum += current.data; current = current.next; } while(current != head); return sum;

Solution

  1. Step 1: Understand traversal stopping condition for circular list

    Traversal must stop when current returns to head to avoid infinite loop.
  2. Step 2: Analyze each option's traversal logic

    Initialize sum=0; Node current=head; do { sum += current.data; current = current.next; } while(current != head); return sum; uses do-while starting at head, summing all nodes once. Initialize sum=0; Node current=head; while(current != null) { sum += current.data; current = current.next; } return sum; uses while(current != null), which never happens in circular list. Initialize sum=0; Node current=head.next; while(current != head) { sum += current.data; current = current.next; } return sum; starts at head.next, missing head's data. Initialize sum=0; Node current=null; do { sum += current.data; current = current.next; } while(current != head); return sum; initializes current to null causing error.
  3. Final Answer:

    Initialize sum=0; Node current=head; do { sum += current.data; current = current.next; } while(current != head); return sum; -> Option C
  4. Quick Check:

    Use do-while with current != head for full traversal [OK]
Hint: Sum with do-while loop until current equals head [OK]
Common Mistakes:
  • Using while(current != null) causing infinite loop
  • Skipping head node in sum calculation
  • Initializing current to null causing errors
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