Skip to content

Commit 5bd04a4

Browse files
committed
Linked list implementation.
1 parent 134e683 commit 5bd04a4

File tree

1 file changed

+53
-0
lines changed

1 file changed

+53
-0
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
class Node:
2+
def __init__(self, value):
3+
self.value = value
4+
self.prev = 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):
13+
new_node = Node(value)
14+
new_node.next = self.head
15+
new_node.prev = None
16+
17+
if self.head is not None:
18+
self.head.prev = new_node
19+
self.head = new_node
20+
21+
if self.tail is None:
22+
self.tail = new_node
23+
24+
return new_node
25+
26+
def pop_tail(self):
27+
if self.tail is None:
28+
return
29+
node_to_be_removed = self.tail
30+
self.tail = node_to_be_removed.prev
31+
32+
if self.tail is not None:
33+
self.tail.next = None
34+
else:
35+
self.head = None
36+
37+
return node_to_be_removed.value
38+
39+
def remove(self, node):
40+
if node.prev is not None:
41+
node.prev.next = node.next
42+
else:
43+
self.head = node.next
44+
if node.next is not None:
45+
node.next.prev = node.prev
46+
if node == self.tail:
47+
self.tail = node.prev
48+
node.prev = None
49+
node.next = None
50+
51+
52+
53+

0 commit comments

Comments
 (0)