File tree Expand file tree Collapse file tree 1 file changed +50
-0
lines changed
Sprint-2/implement_linked_list Expand file tree Collapse file tree 1 file changed +50
-0
lines changed Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments