Skip to content

Commit 29938c1

Browse files
Added adding operations on DoublyLL
1 parent 279d113 commit 29938c1

File tree

1 file changed

+145
-0
lines changed

1 file changed

+145
-0
lines changed

‎Linked List/doublyLL.py

+145
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
import os
2+
from typing import NewType, Sized
3+
4+
class _Node:
5+
__slots__ = '_element', '_link', '_prev'
6+
def __init__(self, element, link, prev):
7+
self._element = element
8+
self._link = link
9+
self._prev = prev
10+
11+
class DoublyLL:
12+
def __init__(self):
13+
self._head = None
14+
self._tail = None
15+
self._size = 0
16+
17+
def __len__(self):
18+
return self._size
19+
20+
def isempty(self):
21+
return self._size == 0
22+
23+
def addLast(self, e):
24+
newest = _Node(e, None, None)
25+
26+
if self.isempty():
27+
self._head = newest
28+
else:
29+
self._tail._link = newest
30+
newest._prev = self._tail
31+
self._tail = newest
32+
self._size += 1
33+
34+
def addFirst(self, e):
35+
newest = _Node(e, None, None)
36+
37+
if self.isempty():
38+
self._head = newest
39+
self._tail = newest
40+
else:
41+
newest._link = self._head
42+
self._head._prev = newest
43+
self._head = newest
44+
self._size += 1
45+
46+
def addAnywhere(self, e, index):
47+
if index >= self._size:
48+
print(f'Index value out of range, it should be between 0 - {self._size - 1}')
49+
elif self.isempty():
50+
print("List was empty, item will be added at the end")
51+
self.addLast(e)
52+
elif index == 0:
53+
self.addFirst(e)
54+
elif index == self._size - 1:
55+
self.addLast(e)
56+
else:
57+
newest = _Node(e, None, None)
58+
p = self._head
59+
for _ in range(index - 1):
60+
p = p._link
61+
newest._link = p._link
62+
p._link._prev = newest
63+
newest._prev = p
64+
p._link = newest
65+
self._size += 1
66+
67+
68+
def display(self):
69+
if self.isempty():
70+
print("List is Empty")
71+
return
72+
73+
p = self._head
74+
print("NULL<-->", end='')
75+
while p:
76+
print(p._element, end="<-->")
77+
p = p._link
78+
print("NULL")
79+
print(
80+
f"Head : {self._head._element}, Tail : {self._tail._element}")
81+
82+
###############################################################################
83+
84+
def options():
85+
'''
86+
Prints Menu for operations
87+
'''
88+
options_list = ['Add Last', 'Add First', 'Add Anywhere',
89+
'Remove First', 'Remove Last', 'Remove Anywhere',
90+
'Display List', 'Exit']
91+
92+
print("MENU")
93+
for i, option in enumerate(options_list):
94+
print(f'{i + 1}. {option}')
95+
96+
choice = int(input("Enter choice: "))
97+
return choice
98+
99+
100+
def switch_case(choice):
101+
'''
102+
Switch Case for operations
103+
'''
104+
os.system('cls')
105+
if choice == 1:
106+
elem = int(input("Enter Item: "))
107+
DL.addLast(elem)
108+
print("Added Item at Last!\n\n")
109+
110+
elif choice == 2:
111+
elem = int(input("Enter Item: "))
112+
DL.addFirst(elem)
113+
print("Added Item at First!\n\n")
114+
115+
elif choice == 3:
116+
elem = int(input("Enter Item: "))
117+
index = int(input("Enter Index: "))
118+
DL.addAnywhere(elem, index)
119+
120+
elif choice == 4:
121+
print("Removed Element from First:", DL.removeFirst())
122+
123+
elif choice == 5:
124+
print("Removed Element from last:", DL.removeLast())
125+
126+
elif choice == 6:
127+
index = int(input("Enter Index: "))
128+
print(f"Removed Item: {DL.removeAnywhere(index)} !\n\n")
129+
130+
elif choice == 7:
131+
print("List: ", end='')
132+
DL.display()
133+
print("\n")
134+
135+
elif choice == 8:
136+
import sys
137+
sys.exit()
138+
139+
###############################################################################
140+
141+
142+
DL = DoublyLL()
143+
while True:
144+
choice = options()
145+
switch_case(choice)

0 commit comments

Comments
 (0)