File tree Expand file tree Collapse file tree
Sprint-2/implement_linked_list Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ from typing import Optional
2+
3+
4+ class _Node :
5+ def __init__ (self , value ):
6+ self .value = value
7+ self .next : Optional ["_Node" ] = None
8+ self .prev : Optional ["_Node" ] = None
9+
10+
11+ class LinkedList :
12+ def __init__ (self ):
13+ self .head = None
14+ self .tail = None
15+
16+ def push_head (self , value ):
17+ new_node = _Node (value )
18+
19+ if self .head is None :
20+ self .head = new_node
21+ self .tail = new_node
22+ else :
23+ new_node .next = self .head
24+ self .head .prev = new_node
25+ self .head = new_node
26+
27+ return new_node
28+
29+ def pop_tail (self ):
30+ if self .tail is None :
31+ return None
32+
33+ value = self .tail .value
34+
35+ if self .head == self .tail :
36+ self .head = None
37+ self .tail = None
38+ else :
39+ self .tail = self .tail .prev
40+ if self .tail :
41+ self .tail .next = None
42+
43+ return value
44+
45+ def remove (self , node ):
46+ if node == self .head :
47+ self .head = node .next
48+ if self .head :
49+ self .head .prev = None
50+ else :
51+ self .tail = None
52+
53+ elif node == self .tail :
54+ self .tail = node .prev
55+ if self .tail :
56+ self .tail .next = None
57+ else :
58+ self .head = None
59+
60+ else :
61+ node .prev .next = node .next
62+ node .next .prev = node .prev
Original file line number Diff line number Diff line change @@ -32,7 +32,7 @@ def test_remove_tail(self):
3232 self .assertEqual (l .head , b )
3333 self .assertEqual (l .tail , b )
3434 self .assertIsNone (b .next )
35- self .assertIsNone (b .previous )
35+ self .assertIsNone (b .prev )
3636
3737
3838if __name__ == "__main__" :
You can’t perform that action at this time.
0 commit comments