File tree Expand file tree Collapse file tree 2 files changed +66
-1
lines changed
Sprint-2/implement_linked_list Expand file tree Collapse file tree 2 files changed +66
-1
lines changed Original file line number Diff line number Diff line change 11.DS_Store
22node_modules
3- . venv
3+ venv
44__pycache__
Original file line number Diff line number Diff line change 1+ class LinkedList :
2+ class Node :
3+ def __init__ (self , value ):
4+ self .value = value
5+ self .next = None
6+ self .previous = None
7+
8+ def __init__ (self ):
9+ self .head = None
10+ self .tail = None
11+
12+ def push_head (self , value ):
13+ """Add an element to the start of the list. Returns a handle to the node."""
14+ new_node = self .Node (value )
15+
16+ if self .head is None :
17+ # List is empty
18+ self .head = new_node
19+ self .tail = new_node
20+ else :
21+ # Add to front
22+ new_node .next = self .head
23+ self .head .previous = new_node
24+ self .head = new_node
25+
26+ return new_node
27+
28+ def pop_tail (self ):
29+ """Remove and return the element from the end of the list."""
30+ if self .tail is None :
31+ raise IndexError ("pop from empty list" )
32+
33+ value = self .tail .value
34+
35+ if self .head == self .tail :
36+ # Only one element
37+ self .head = None
38+ self .tail = None
39+ else :
40+ # Multiple elements
41+ self .tail = self .tail .previous
42+ self .tail .next = None
43+
44+ return value
45+
46+ def remove (self , node ):
47+ """Remove a specific node from the list using the handle from push_head."""
48+ if node is None :
49+ return
50+
51+ if node .previous is not None :
52+ node .previous .next = node .next
53+ else :
54+ # node is head
55+ self .head = node .next
56+
57+ if node .next is not None :
58+ node .next .previous = node .previous
59+ else :
60+ # node is tail
61+ self .tail = node .previous
62+
63+ # Clean up references
64+ node .next = None
65+ node .previous = None
You can’t perform that action at this time.
0 commit comments