Skip to content

Commit ce652fd

Browse files
Implement doubly linked list
1 parent de683df commit ce652fd

1 file changed

Lines changed: 54 additions & 0 deletions

File tree

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
class Node:
2+
def __init__(self, value):
3+
self.value = value
4+
self.next = None # Pointer to the next node in the list.
5+
self.previous = None # a pointer to the previous node so the removal can be done in constant time
6+
7+
class LinkedList:
8+
def __init__(self):
9+
self.head = None
10+
self.tail = None
11+
12+
def push_head(self, value):
13+
new_node = Node(value)
14+
if not self.head:
15+
self.head = self.tail = new_node
16+
else:
17+
new_node.next = self.head
18+
self.head.previous = new_node
19+
self.head = new_node
20+
21+
return new_node
22+
23+
def pop_tail(self):
24+
if not self.tail:
25+
return None
26+
27+
removed_value = self.tail.value
28+
if self.head == self.tail:
29+
self.head = self.tail = None
30+
else:
31+
self.tail = self.tail.previous
32+
self.tail.next = None
33+
34+
return removed_value
35+
36+
def remove(self, node):
37+
if not node:
38+
return
39+
40+
if node == self.head:
41+
self.head = node.next
42+
43+
44+
if node == self.tail:
45+
self.tail = node.previous
46+
47+
48+
if node.previous:
49+
node.previous.next = node.next
50+
if node.next:
51+
node.next.previous = node.previous
52+
53+
54+
node.next = node.previous = None

0 commit comments

Comments
 (0)