Skip to content

Commit ed42693

Browse files
London | 26-SDC-Mar | beko | Sprint 2 | implement a linked list in python
1 parent e718fb4 commit ed42693

2 files changed

Lines changed: 63 additions & 1 deletion

File tree

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

‎Sprint-2/implement_linked_list/linked_list_test.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def test_remove_tail(self):
3232
self.assertEqual(l.head, b)
3333
self.assertEqual(l.tail, b)
3434
self.assertIsNone(b.next)
35-
self.assertIsNone(b.previous)
35+
self.assertIsNone(b.prev)
3636

3737

3838
if __name__ == "__main__":

0 commit comments

Comments
 (0)