Skip to content

Commit d36958c

Browse files
committedFeb 4, 2023
add circular doubly linked list
1 parent 6c2a678 commit d36958c

File tree

1 file changed

+163
-0
lines changed

1 file changed

+163
-0
lines changed
 
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
public class DoublyCircularLL {
2+
static class Node {
3+
private Node prev;
4+
private Node next;
5+
private int data;
6+
7+
Node(int data) {
8+
this.data = data;
9+
}
10+
}
11+
12+
Node head = null;
13+
Node tail = null;
14+
private int size;
15+
16+
void addEmpty(int data) {
17+
Node node = new Node(data);
18+
head = tail = node;
19+
node.prev = head;
20+
node.next = head;
21+
size++;
22+
}
23+
24+
void addFront(int data) {
25+
Node node = new Node(data);
26+
if (head == null) {
27+
addEmpty(data);
28+
} else {
29+
node.next = head;
30+
tail.next = node;
31+
node.prev = tail;
32+
head = node;
33+
size++;
34+
}
35+
}
36+
37+
void addEnd(int data) {
38+
Node node = new Node(data);
39+
if (tail == null) {
40+
addEmpty(data);
41+
return;
42+
}
43+
tail.next = node;
44+
node.prev = tail;
45+
node.next = head;
46+
head.prev = node;
47+
tail = node;
48+
size++;
49+
}
50+
51+
void addAt(int data, int index) {
52+
Node getNode = get(index);
53+
Node node = new Node(data);
54+
if (index < 0 || index >= size) {
55+
System.out.println("index: " + index + " is out of bound!");
56+
return;
57+
}
58+
if (index == 0) {
59+
addFront(data);
60+
return;
61+
}
62+
if (index == size - 1) {
63+
addEnd(data);
64+
return;
65+
}
66+
node.next = getNode.next;
67+
node.prev = getNode;
68+
getNode.next.prev = node;
69+
getNode.next = node;
70+
size++;
71+
}
72+
73+
Node get(int index) {
74+
Node temp = head;
75+
if (index < 0 || index >= size) {
76+
return null;
77+
}
78+
for (int i = 0; i < index; i++) {
79+
temp = temp.next;
80+
}
81+
return temp;
82+
}
83+
84+
Node search(int item) {
85+
Node temp = head;
86+
while (temp != null) {
87+
if (temp.data == item) {
88+
return temp;
89+
}
90+
temp = temp.next;
91+
if (temp == head) {
92+
break;
93+
}
94+
}
95+
return null;
96+
}
97+
98+
int size() {
99+
return size;
100+
}
101+
102+
void removeFirst() {
103+
if (head == tail) {
104+
head = tail = null;
105+
return;
106+
}
107+
head = head.next;
108+
head.prev = tail;
109+
tail.next = head;
110+
size--;
111+
}
112+
113+
void removeLast() {
114+
if (head == tail) {
115+
head = tail = null;
116+
return;
117+
}
118+
tail = tail.prev;
119+
tail.next = head;
120+
head.prev = tail;
121+
size--;
122+
}
123+
124+
void deleteNode(int item) {
125+
Node getNode = search(item);
126+
if (getNode == head) {
127+
removeFirst();
128+
return;
129+
}
130+
if (getNode == tail) {
131+
removeLast();
132+
return;
133+
}
134+
getNode.prev.next = getNode.next;
135+
getNode.next.prev = getNode.prev;
136+
getNode = null;
137+
size--;
138+
}
139+
140+
void display() {
141+
Node temp = head;
142+
if (head == null) {
143+
System.out.println("list is empty!");
144+
return;
145+
}
146+
do {
147+
System.out.print(temp.data + "-> ");
148+
temp = temp.next;
149+
} while (temp != head);
150+
System.out.println("NULL" + " size: " + size());
151+
}
152+
153+
public static void main(String[] args) {
154+
DoublyCircularLL list = new DoublyCircularLL();
155+
list.addFront(15);
156+
list.addFront(19);
157+
list.addEnd(48);
158+
list.addEnd(57);
159+
list.display();
160+
list.addAt(69, 4);
161+
list.display();
162+
}
163+
}

0 commit comments

Comments
 (0)