Skip to content

Commit d8941ef

Browse files
authored
Create circular_linked_list.py
1 parent 858a1fe commit d8941ef

File tree

1 file changed

+134
-0
lines changed

1 file changed

+134
-0
lines changed
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
from turtle import mode
2+
3+
4+
class Node :
5+
def __init__(self , data , next = None):
6+
self.data = data
7+
self.next = next
8+
9+
class CircularLinkedList :
10+
def __init__(self):
11+
self.head = self.tail = None
12+
self.length = 0
13+
14+
def insert_at_beginning(self , data):
15+
node = Node(data , self.head)
16+
if self.head is None:
17+
self.head = self.tail = node
18+
node.next = node
19+
self.length += 1
20+
return
21+
self.head = node
22+
self.tail.next = node
23+
self.length += 1
24+
25+
def insert_at_end(self , data):
26+
node = Node(data , self.head)
27+
if self.head is None:
28+
self.head = self.tail = node
29+
node.next = node
30+
self.length += 1
31+
return
32+
self.tail.next = node
33+
self.tail = node
34+
self.length += 1
35+
36+
def len(self):
37+
return self.length
38+
39+
def pop_at_beginning(self):
40+
if self.head is None:
41+
print('List is Empty!')
42+
return
43+
self.head = self.head.next
44+
self.tail.next = self.head
45+
self.length -= 1
46+
47+
def pop_at_end(self):
48+
if self.head is None:
49+
print('List is Empty!')
50+
return
51+
temp = self.head
52+
while temp:
53+
if temp.next is self.tail:
54+
self.tail.next = None
55+
self.tail = temp
56+
temp.next = self.head
57+
self.length -= 1
58+
return
59+
temp = temp.next
60+
61+
def insert_values(self , arr : list):
62+
self.head = self.tail = None
63+
self.length = 0
64+
for i in arr:
65+
self.insert_at_end(i)
66+
67+
def print(self):
68+
if self.head is None:
69+
print('The List is Empty!')
70+
return
71+
temp = self.head.next
72+
print(f'{self.head.data} ->' , end=' ')
73+
while temp != self.head:
74+
print(f'{temp.data} ->' , end=' ')
75+
temp = temp.next
76+
print(f'{self.tail.next.data}')
77+
78+
def insert_at(self , idx , data):
79+
if idx == 0:
80+
self.insert_at_beginning(data)
81+
return
82+
elif idx == self.length:
83+
self.insert_at_end(data)
84+
return
85+
elif 0 > idx or idx > self.length:
86+
raise Exception('Invalid Position')
87+
return
88+
pos = 0
89+
temp = self.head
90+
while temp:
91+
if pos == idx - 1:
92+
node = Node(data , temp.next)
93+
temp.next = node
94+
self.length += 1
95+
return
96+
pos += 1
97+
temp = temp.next
98+
99+
def remove_at(self , idx):
100+
if 0 > idx or idx >= self.length:
101+
raise Exception('Invalid Position')
102+
elif idx == 0:
103+
self.pop_at_beginning()
104+
return
105+
elif idx == self.length - 1:
106+
self.pop_at_end()
107+
return
108+
temp = self.head
109+
pos = 0
110+
while temp:
111+
if pos == idx - 1:
112+
temp.next = temp.next.next
113+
self.length -= 1
114+
return
115+
pos += 1
116+
temp = temp.next
117+
118+
def main():
119+
ll = CircularLinkedList()
120+
ll.insert_at_end(1)
121+
ll.insert_at_end(4)
122+
ll.insert_at_end(3)
123+
ll.insert_at_beginning(2)
124+
ll.insert_values([1 , 2, 3 ,4 ,5 ,6,53,3])
125+
# ll.pop_at_end()
126+
ll.insert_at(8, 7)
127+
# ll.remove_at(2)
128+
ll.print()
129+
print(f'{ll.len() = }')
130+
131+
132+
133+
if __name__ == '__main__':
134+
main()

0 commit comments

Comments
 (0)