0% found this document useful (0 votes)
3 views

Loop detection program

Uploaded by

suraj.k2022
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Loop detection program

Uploaded by

suraj.k2022
Copyright
© © All Rights Reserved
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 5

import java.util.

*;

class Node {
int num;
Node next;

Node(int val) {
num = val;
next = null;
}
}

class Main {

// Insert a node into the linked list


static Node insertNode(Node head, int val) {
Node newNode = new Node(val);
if (head == null) {
head = newNode;
return head;
}
Node temp = head;
while (temp.next != null)
temp = temp.next;
temp.next = newNode;
return head;
}

// Display the linked list


static void display(Node head) {
Node temp = head;
while (temp.next != null) {
System.out.print(temp.num + " -> ");
temp = temp.next;
}
System.out.println(temp.num + " -> NULL");
}

// Create a cycle in the linked list


static void createCycle(Node head, int a, int b) {
int cnta = 0, cntb = 0;
Node p1 = head;
Node p2 = head;

while (cnta != a || cntb != b) {


if (cnta != a) {
p1 = p1.next;
cnta++;
}
if (cntb != b) {
p2 = p2.next;
cntb++;
}
}
p2.next = p1; // Create the cycle
}

// Detect if a cycle exists in the linked list


static boolean cycleDetect(Node head) {
if (head == null) return false;

Node fast = head;


Node slow = head;

while (fast != null && fast.next != null) {


fast = fast.next.next;
slow = slow.next;

// If slow and fast meet, a cycle exists


if (fast == slow) return true;
}
return false;
}

public static void main(String args[]) {


Scanner sc = new Scanner(System.in);

// Input the size of the linked list


System.out.print("Enter the number of nodes in the linked list: ");
int n = sc.nextInt();
Node head = null;

// Input the elements of the linked list


System.out.println("Enter the elements of the linked list:");
for (int i = 0; i < n; i++) {
int m = sc.nextInt();
head = insertNode(head, m);
}

// Display the original linked list


System.out.println("Original Linked List:");
display(head);

// Input the position to create a cycle


System.out.print("Enter the position to create a cycle: ");
int a = sc.nextInt();
createCycle(head, 1, a); // Create a cycle in the list

// Detect if a cycle exists


if (cycleDetect(head)) {
System.out.println("Cycle detected");
} else {
System.out.println("Cycle not detected");
}

sc.close();
}
}

input :
import java.util.*;

class Node {
int num;
Node next;
Node(int val) {
num = val;
next = null;
}
}

class Main {

// Insert a node into the linked list


static Node insertNode(Node head, int val) {
Node newNode = new Node(val);
if (head == null) {
head = newNode;
return head;
}
Node temp = head;
while (temp.next != null)
temp = temp.next;
temp.next = newNode;
return head;
}

// Display the linked list


static void display(Node head) {
Node temp = head;
while (temp.next != null) {
System.out.print(temp.num + " -> ");
temp = temp.next;
}
System.out.println(temp.num + " -> NULL");
}

// Create a cycle in the linked list


static void createCycle(Node head, int a, int b) {
int cnta = 0, cntb = 0;
Node p1 = head;
Node p2 = head;

while (cnta != a || cntb != b) {


if (cnta != a) {
p1 = p1.next;
cnta++;
}
if (cntb != b) {
p2 = p2.next;
cntb++;
}
}
p2.next = p1; // Create the cycle
}

// Detect if a cycle exists in the linked list


static boolean cycleDetect(Node head) {
if (head == null) return false;

Node fast = head;


Node slow = head;
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;

// If slow and fast meet, a cycle exists


if (fast == slow) return true;
}
return false;
}

public static void main(String args[]) {


Scanner sc = new Scanner(System.in);

// Input the size of the linked list


System.out.print("Enter the number of nodes in the linked list: ");
int n = sc.nextInt();
Node head = null;

// Input the elements of the linked list


System.out.println("Enter the elements of the linked list:");
for (int i = 0; i < n; i++) {
int m = sc.nextInt();
head = insertNode(head, m);
}

// Display the original linked list


System.out.println("Original Linked List:");
display(head);

// Input the position to create a cycle


System.out.print("Enter the position to create a cycle: ");
int a = sc.nextInt();
createCycle(head, 1, a); // Create a cycle in the list

// Detect if a cycle exists


if (cycleDetect(head)) {
System.out.println("Cycle detected");
} else {
System.out.println("Cycle not detected");
}

sc.close();
}
}

Sample Test case:

Enter the number of nodes in the linked list: 5


Enter the elements of the linked list:
1 2 3 4 5
Original Linked List:
1 -> 2 -> 3 -> 4 -> 5 -> NULL
Enter the position to create a cycle: 4
Cycle detected
Time Complexity:O(n)
Space:O(1)

You might also like