Skip to content

Commit b7633aa

Browse files
linked-list
1 parent e718fb4 commit b7633aa

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.previous = None
5+
self.next = None
6+
7+
class LinkedList:
8+
def __init__(self):
9+
self.head = None
10+
self.tail = None
11+
12+
def push_head(self, value) -> Node:
13+
new_node = Node(value)
14+
15+
if self.head is None:
16+
self.head = new_node
17+
self.tail = new_node
18+
else:
19+
new_node.next = self.head
20+
self.head.previous = new_node
21+
self.head = new_node
22+
23+
return new_node
24+
25+
def remove(self, node: Node) -> None:
26+
if node is None:
27+
return
28+
29+
if node == self.head:
30+
self.head = node.next
31+
32+
if node == self.tail:
33+
self.tail = node.previous
34+
35+
if node.previous is not None:
36+
node.previous.next = node.next
37+
38+
if node.next is not None:
39+
node.next.previous = node.previous
40+
41+
node.next = None
42+
node.previous = None
43+
44+
def pop_tail(self):
45+
if self.tail is None:
46+
return None
47+
48+
last_node = self.tail
49+
value = last_node.value
50+
51+
self.remove(last_node)
52+
53+
return value
54+

0 commit comments

Comments
 (0)