Skip to content

Commit c334d36

Browse files
committed
Implement linked list (head and tail)
1 parent cf9e042 commit c334d36

1 file changed

Lines changed: 62 additions & 0 deletions

File tree

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
class Node:
2+
3+
def __init__(self, value):
4+
self.value = value
5+
self.next = None
6+
self.previous = None
7+
8+
9+
class LinkedList:
10+
11+
def __init__(self):
12+
self.head = None
13+
self.tail = None
14+
15+
def push_head(self, value):
16+
new_node = Node(value)
17+
18+
if self.head is None:
19+
self.head = new_node
20+
self.tail = new_node
21+
else:
22+
new_node.next = self.head
23+
self.head.previous = new_node
24+
self.head = new_node
25+
26+
return new_node
27+
28+
def pop_tail(self):
29+
30+
if self.tail is None:
31+
return None
32+
33+
value_to_return = self.tail.value
34+
35+
if self.head == self.tail:
36+
self.head = None
37+
self.tail = None
38+
else:
39+
self.tail = self.tail.previous
40+
self.tail.next = None
41+
42+
return value_to_return
43+
44+
def remove(self, node):
45+
46+
if node == self.head:
47+
self.head = node.next
48+
if self.head:
49+
self.head.previous = None
50+
else:
51+
self.tail = None
52+
53+
elif node == self.tail:
54+
self.tail = node.previous
55+
if self.tail:
56+
self.tail.next = None
57+
else:
58+
self.head = None
59+
60+
else:
61+
node.previous.next = node.next
62+
node.next.previous = node.previous

0 commit comments

Comments
 (0)