-
Notifications
You must be signed in to change notification settings - Fork 14
/
circularlinkedlist.java
134 lines (116 loc) · 3.46 KB
/
circularlinkedlist.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// Node class representing a single node in the circular linked list
class Node {
int data;
Node next;
public Node(int data) {
this.data = data;
this.next = null;
}
}
// CircularLinkedList class representing the entire circular linked list
class CircularLinkedList {
Node head;
// Method to add a new node at the end of the circular linked list
public void addNode(int data) {
Node newNode = new Node(data);
if (head == null) {
head = newNode;
newNode.next = head;
} else {
Node temp = head;
while (temp.next != head) {
temp = temp.next;
}
temp.next = newNode;
newNode.next = head;
}
}
// Method to print the circular linked list
public void printList() {
Node temp = head;
if (head != null) {
do {
System.out.print(temp.data + " ");
temp = temp.next;
} while (temp != head);
System.out.println();
}
}
// Method to delete a node from the circular linked list
public void deleteNode(int data) {
if (head == null) return;
if (head.data == data) {
if (head.next == head) {
head = null;
} else {
Node temp = head;
while (temp.next != head) {
temp = temp.next;
}
temp.next = head.next;
head = head.next;
}
return;
}
Node temp = head;
while (temp.next != head) {
if (temp.next.data == data) {
temp.next = temp.next.next;
return;
}
temp = temp.next;
}
}
// Method to find the middle element of the circular linked list
public int findMiddle() {
Node slow = head;
Node fast = head;
if (head != null) {
while (fast.next != head && fast.next.next != head) {
fast = fast.next.next;
slow = slow.next;
}
}
return slow.data;
}
// Method to detect a cycle in the circular linked list
public boolean detectCycle() {
// A circular linked list always has a cycle
return true;
}
// Method to reverse the circular linked list
public void reverseList() {
Node prev = null;
Node current = head;
Node next = null;
if (head != null) {
do {
next = current.next;
current.next = prev;
prev = current;
current = next;
} while (current != head);
head = prev;
}
}
}
public class circularlinkedlist {
public static void main(String[] args) {
CircularLinkedList list = new CircularLinkedList();
list.addNode(1);
list.addNode(2);
list.addNode(3);
list.addNode(4);
list.addNode(5);
System.out.println("Circular Linked List:");
list.printList();
System.out.println("Middle Element: " + list.findMiddle());
System.out.println("Cycle Detection: " + list.detectCycle());
list.reverseList();
System.out.println("Reversed Circular Linked List:");
list.printList();
list.deleteNode(3);
System.out.println("Circular Linked List after deletion:");
list.printList();
}
}