- Given a single linked list, we would like to find out whether loop or cycle exists in a single linked list.
- We will iterate through single linked list using non-recursive algorithm.
- We have discussed similar problems
What is cycle or loop in a single linked list ?
Let us take an example to elaborate the problem statement. We have shown the single linked list in Fig 1.
- The single list shown in Fig 1 is not null terminated.
- if we start traversing the single linked list, it will never terminate.
- 20 -> 25-> 30-> 35-> 40 -> 45-> 50-> 55-> 30-> 35-> 40 -> 45-> 50-> 55->
- if we start traversing the single linked list, it will never terminate.
- The single linked list traversal will always remain in infinite loop.
- This is very important point to detect whether loop exist in the linked list.

Floyd’s cycle detection algorithm to find loop in single linked list.
Step 1: Floyd’s cycle detection algorithm
- Take slow and fast pointer.
- slow and fast pointer will point to head of linked list
- slow pointer will jump by 1 node.
- fast pointer will jump by 2 nodes.

Step 2: Floyd’s cycle detection algorithm
- slow pointer jumped by 1 node.
- fast pointer jumped by 2 node.

Step 3: Floyd’s cycle detection algorithm
- fast pointer keep on moving by two nodes
- slow pointer will keep in jumping by 1 node

Step 4: Floyd’s cycle detection algorithm
- Keep on performing the step 3
- We will encounter the situation where slow == fast
- Signifies that the loop exists in a single linked list
- If we did not encounter slow == fast
- Linked list does not have loop

Time complexity of algorithm is O (n).
Program – Floyd’s cycle detection algorithm to find loop in single linked list
1.) DetectLoop Class:
- We are passing the head of single linked list, to isLooped method.
- isLooped method is used to detect, whether loop exists in a single linked list.
package org.learn.Question;
public class DetectLoop {
public static boolean isLooped(Node head) {
if (null == head) {
System.out.println("Single linked list is empty");
return false;
}
Node slow = head;
Node fast = head;
while (slow != null && fast != null && fast.next != null) {
fast = fast.next;
if (slow == fast) {
System.out.println("Loop exists in a single linked list");
return true;
}
fast = fast.next;
if (slow == fast) {
System.out.println("Loop exists in a single linked list");
return true;
}
slow = slow.next;
}
System.out.println("No loop exists in a single linked list");
return false;
}
public static Node insert(Node head, int data) {
while (head.next != null)
head = head.next;
head.next = new Node(data);
return head.next;
}
}
2.) DetechLoopClient Class:
- We are creating a single linked list in main method.
- We are calling DetectLoop.isLooped method, to check whether loop exists in a single linked list
package org.learn.Client;
import org.learn.Question.DetectLoop;
import org.learn.Question.Node;
public class DetechLoopClient {
public static void main(String[] args) {
int[] data = { 30, 35, 40, 45, 50, 55 };
Node node30 = new Node(data[0]);
Node node = null;
for (int count = 1; count < data.length; count++) {
node = DetectLoop.insert(node30, data[count]);
}
node.next = node30;
node = new Node(20);
node.next = new Node(25);
node.next.next = node30;
DetectLoop.isLooped(node);
}
}
3.) Node Class:
- Node class representing the nodes of a single linked list
package org.learn.Question;
public class Node {
public int data;
public Node next;
public Node(int num) {
this.data = num;
this.next = null;
}
}
Output – Floyd’s cycle detection algorithm to check loop in a single linked list
Loop found in linked list
