Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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‎

Lines changed: 81 additions & 12 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /