Skip to content

Commit 4597bef

Browse files
Built Doubly Linked List functionality
1 parent 4235c7a commit 4597bef

File tree

2 files changed

+138
-1
lines changed

2 files changed

+138
-1
lines changed

DoublyLinkedList.py

Lines changed: 138 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,138 @@
1+
class Node:
2+
def __init__(self, value):
3+
self.value = value
4+
self.next = None
5+
self.prev = None
6+
7+
8+
class DoublyLinkedList:
9+
def __init__(self, value):
10+
new_node = Node(value)
11+
self.head = new_node
12+
self.tail = new_node
13+
self.length = 1
14+
15+
def print_list(self):
16+
temp = self.head
17+
while temp is not None:
18+
print(temp.value)
19+
temp = temp.next
20+
21+
def append(self, value):
22+
new_node = Node(value)
23+
if self.head is None:
24+
self.head = new_node
25+
self.tail = new_node
26+
else:
27+
self.tail.next = new_node
28+
new_node.prev = self.tail
29+
self.tail = new_node
30+
self.length += 1
31+
return True
32+
33+
def pop(self):
34+
if self.length == 0:
35+
return None
36+
temp = self.tail
37+
if self.length == 1:
38+
self.head = None
39+
self.tail = None
40+
else:
41+
self.tail = temp.prev
42+
self.tail.next = None
43+
temp.prev = None
44+
self.length -= 1
45+
return temp
46+
47+
def prepend(self, value):
48+
new_node = Node(value)
49+
if self.length == 0:
50+
self.head = new_node
51+
self.tail = new_node
52+
else:
53+
new_node.next = self.head
54+
self.head.prev = new_node
55+
self.head = new_node
56+
self.length += 1
57+
return True
58+
59+
def pop_first(self):
60+
if self.length == 0:
61+
return None
62+
temp = self.head
63+
if self.length == 1:
64+
self.head = None
65+
self.tail = None
66+
else:
67+
self.head = temp.next
68+
self.head.prev = None
69+
temp.next = None
70+
self.length -= 1
71+
return temp
72+
73+
def get(self, index):
74+
if index < 0 or index >= self.length:
75+
return None
76+
if index < self.length / 2:
77+
temp = self.head
78+
for _ in range(index):
79+
temp = temp.next
80+
else:
81+
temp = self.tail
82+
for _ in range((self.length - 1) - index):
83+
temp = temp.prev
84+
return temp
85+
86+
def set_value(self, index, value):
87+
temp = self.get(index)
88+
if temp:
89+
temp.value = value
90+
return True
91+
return False
92+
93+
def insert(self, index, value):
94+
if index == 0:
95+
return self.prepend(value)
96+
elif index == self.length:
97+
return self.append(value)
98+
left = self.get(index - 1)
99+
if left:
100+
right = left.next
101+
new_node = Node(value)
102+
left.next = new_node
103+
new_node.prev = left
104+
new_node.next = right
105+
right.prev = new_node
106+
self.length += 1
107+
return True
108+
return False
109+
110+
def remove(self, index):
111+
if index == 0:
112+
return self.pop_first()
113+
elif index == self.length - 1:
114+
return self.pop()
115+
temp = self.get(index)
116+
if temp:
117+
left = temp.prev
118+
right = temp.next
119+
left.next = right
120+
temp.prev = None
121+
temp.next = None
122+
right.prev = left
123+
self.length -= 1
124+
return temp
125+
return None
126+
127+
128+
dll = DoublyLinkedList(0)
129+
dll.append(1)
130+
dll.append(2)
131+
dll.append(3)
132+
dll.append(4)
133+
dll.append(5)
134+
dll.append(6)
135+
dll.append(7)
136+
dll.append(8)
137+
dll.append(9)
138+
dll.print_list()

LinkedList.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ def reverse(self):
126126
temp = self.head
127127
self.head = self.tail
128128
self.tail = temp
129-
right = temp.next
130129
left = None
131130
for _ in range(self.length):
132131
right = temp.next

0 commit comments

Comments
 (0)