Skip to content

Commit 6927be3

Browse files
committed
implement linked list in python
1 parent c9e2b94 commit 6927be3

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
class Node:
2+
def __init__(self, value):
3+
self.value = value
4+
self.previous = None # renamed from prev
5+
self.next = None
6+
7+
8+
class LinkedList:
9+
def __init__(self):
10+
self.head = None
11+
self.tail = None
12+
13+
def push_head(self, value):
14+
"""Add element to start (O(1))"""
15+
new_node = Node(value)
16+
new_node.next = self.head
17+
18+
if self.head:
19+
self.head.previous = new_node
20+
else:
21+
# If list was empty, tail is also the new node
22+
self.tail = new_node
23+
24+
self.head = new_node
25+
return new_node # handle for later removal
26+
27+
def pop_tail(self):
28+
"""Remove element from end (O(1))"""
29+
if not self.tail:
30+
raise IndexError("pop_tail from empty list")
31+
32+
value = self.tail.value
33+
self.remove(self.tail)
34+
return value
35+
36+
def remove(self, node):
37+
"""Remove node (O(1)) using the handle"""
38+
if node.previous:
39+
node.previous.next = node.next
40+
else:
41+
# Node is head
42+
self.head = node.next
43+
44+
if node.next:
45+
node.next.previous = node.previous
46+
else:
47+
# Node is tail
48+
self.tail = node.previous
49+
50+
node.previous = node.next = None

0 commit comments

Comments
 (0)