Skip to content

Commit 1735011

Browse files
authored
Merge pull request #119 from yashaswiadyalu/yashu
2 parents 802e23c + 5e59c93 commit 1735011

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
class Node:
2+
def __init__(self, data):
3+
self.data = data
4+
self.next = None
5+
6+
7+
class CircularLinkedList:
8+
def __init__(self):
9+
self.head = None
10+
11+
def get_node(self, index):
12+
if self.head is None:
13+
return None
14+
current = self.head
15+
for i in range(index):
16+
current = current.next
17+
if current == self.head:
18+
return None
19+
return current
20+
21+
def get_prev_node(self, ref_node):
22+
if self.head is None:
23+
return None
24+
current = self.head
25+
while current.next != ref_node:
26+
current = current.next
27+
return current
28+
29+
def insert_after(self, ref_node, new_node):
30+
new_node.next = ref_node.next
31+
ref_node.next = new_node
32+
33+
def insert_before(self, ref_node, new_node):
34+
prev_node = self.get_prev_node(ref_node)
35+
self.insert_after(prev_node, new_node)
36+
37+
def insert_at_end(self, new_node):
38+
if self.head is None:
39+
self.head = new_node
40+
new_node.next = new_node
41+
else:
42+
self.insert_before(self.head, new_node)
43+
44+
def insert_at_beg(self, new_node):
45+
self.insert_at_end(new_node)
46+
self.head = new_node
47+
48+
def remove(self, node):
49+
if self.head.next == self.head:
50+
self.head = None
51+
else:
52+
prev_node = self.get_prev_node(node)
53+
prev_node.next = node.next
54+
if self.head == node:
55+
self.head = node.next
56+
57+
def display(self):
58+
if self.head is None:
59+
return
60+
current = self.head
61+
while True:
62+
print(current.data, end = ' ')
63+
current = current.next
64+
if current == self.head:
65+
break
66+
67+
68+
a_cllist = CircularLinkedList()
69+
70+
print('Menu')
71+
print('insert <data> after <index>')
72+
print('insert <data> before <index>')
73+
print('insert <data> at beg')
74+
print('insert <data> at end')
75+
print('remove <index>')
76+
print('quit')
77+
78+
while True:
79+
print('The list: ', end = '')
80+
a_cllist.display()
81+
print()
82+
do = input('What would you like to do? ').split()
83+
84+
operation = do[0].strip().lower()
85+
86+
if operation == 'insert':
87+
data = int(do[1])
88+
position = do[3].strip().lower()
89+
new_node = Node(data)
90+
suboperation = do[2].strip().lower()
91+
if suboperation == 'at':
92+
if position == 'beg':
93+
a_cllist.insert_at_beg(new_node)
94+
elif position == 'end':
95+
a_cllist.insert_at_end(new_node)
96+
else:
97+
index = int(position)
98+
ref_node = a_cllist.get_node(index)
99+
if ref_node is None:
100+
print('No such index.')
101+
continue
102+
if suboperation == 'after':
103+
a_cllist.insert_after(ref_node, new_node)
104+
elif suboperation == 'before':
105+
a_cllist.insert_before(ref_node, new_node)
106+
107+
elif operation == 'remove':
108+
index = int(do[1])
109+
node = a_cllist.get_node(index)
110+
if node is None:
111+
print('No such index.')
112+
continue
113+
a_cllist.remove(node)
114+
115+
elif operation == 'quit':
116+
break

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy