Skip to content

Commit 904a188

Browse files
Added Circular List Deletion Operations
1 parent b52361a commit 904a188

File tree

1 file changed

+81
-12
lines changed

1 file changed

+81
-12
lines changed

Circular Linked List/circularLL.py

+81-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import os
22

3-
from typing_extensions import TypeAlias
43

54
class _Node:
65
__slots__ = '_element', '_link'
@@ -9,8 +8,8 @@ def __init__(self, element, link):
98
self._element = element
109
self._link = link
1110

12-
class CicularLL:
1311

12+
class CicularLL:
1413
def __init__(self):
1514
self._head = None
1615
self._tail = None
@@ -31,23 +30,94 @@ def addLast(self, e):
3130
else:
3231
newest._link = self._tail._link
3332
self._tail._link = newest
34-
33+
3534
self._tail = newest
3635
self._size += 1
37-
36+
3837
def addFirst(self, e):
3938
newest = _Node(e, None)
4039

40+
newest._link = self._head
4141
if self.isempty():
42-
newest._link = self._head
4342
self._head = newest
4443
self._tail = newest
4544
else:
46-
newest._link = self._head
4745
self._tail._link = newest
4846
self._head = newest
47+
48+
self._size += 1
49+
50+
def addAnywhere(self, e, index):
51+
newest = _Node(e, None)
52+
if index >= self._size:
53+
print(
54+
f"Index out of range. It should be between 0 - {self._size - 1}")
55+
elif self.isempty():
56+
print("List was empty, item will be added in the End.")
57+
self.addLast(e)
58+
elif index == 0:
59+
self.addFirst(e)
60+
else:
61+
p = self._head
62+
for _ in range(index - 1):
63+
p = p._link
64+
newest._link = p._link
65+
p._link = newest
66+
print(f"Added Item at index {index}!\n\n")
67+
4968
self._size += 1
50-
69+
70+
def removeFirst(self):
71+
if self.isempty():
72+
print("List is Empty")
73+
return
74+
75+
e = self._head._element
76+
self._head = self._head._link
77+
self._tail._link = self._head
78+
self._size -= 1
79+
return e
80+
81+
def removeLast(self):
82+
if self.isempty():
83+
print("List is Empty")
84+
return
85+
86+
p = self._head # you can also use self._tail._link as it also points to head node
87+
if p._link == self._head:
88+
return self.removeFirst()
89+
else:
90+
while p._link._link != self._head:
91+
p = p._link
92+
e = p._link._element
93+
p._link = self._head
94+
self._tail = p
95+
96+
self._size -= 1
97+
return e
98+
99+
def removeAnywhere(self, index):
100+
101+
if index >= self._size:
102+
print(
103+
f"Index out of range. It should be between 0 - {self._size - 1}")
104+
return
105+
elif self.isempty():
106+
print("List is Empty")
107+
return
108+
elif index == 0:
109+
return self.removeFirst()
110+
elif index == self._size - 1:
111+
return self.removeLast()
112+
else:
113+
p = self._head
114+
for _ in range(index - 1):
115+
p = p._link
116+
e = p._link._element
117+
p._link = p._link._link
118+
119+
self._size -= 1
120+
return e
51121

52122
def display(self):
53123
if self.isempty() == 0:
@@ -78,7 +148,6 @@ def options():
78148

79149

80150
def switch_case(choice):
81-
82151
os.system('cls')
83152
if choice == 1:
84153
elem = int(input("Enter Item: "))
@@ -94,7 +163,6 @@ def switch_case(choice):
94163
elem = int(input("Enter Item: "))
95164
index = int(input("Enter Index: "))
96165
CL.addAnywhere(elem, index)
97-
print(f"Added Item at index {index}!\n\n")
98166

99167
elif choice == 4:
100168
print("Removed Element from First:", CL.removeFirst())
@@ -104,8 +172,8 @@ def switch_case(choice):
104172

105173
elif choice == 6:
106174
index = int(input("Enter Index: "))
107-
CL.removeAnywhere(index)
108-
print(f"Removed Item at index {index}!\n\n")
175+
print(f"Removed Item: {CL.removeAnywhere(index)} !\n\n")
176+
109177
elif choice == 7:
110178
print("List: ", end='')
111179
CL.display()
@@ -115,8 +183,9 @@ def switch_case(choice):
115183
import sys
116184
sys.exit()
117185

186+
###############################################################################
118187

119188
CL = CicularLL()
120189
while True:
121190
choice = options()
122-
switch_case(choice)
191+
switch_case(choice)

0 commit comments

Comments
 (0)