File tree Expand file tree Collapse file tree 1 file changed +57
-0
lines changed
Sprint-2/implement_linked_list Expand file tree Collapse file tree 1 file changed +57
-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 .next = None
5+ self .previous = 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+ new_node = Node (value )
15+
16+ if self .head is None :
17+ self .head = new_node
18+ self .tail = new_node
19+ else :
20+ new_node .next = self .head
21+ self .head .previous = new_node
22+ self .head = new_node
23+
24+ return new_node
25+
26+ def pop_tail (self ):
27+
28+ if self .tail is None :
29+ raise IndexError ("pop_tail from empty linked list" )
30+
31+ value = self .tail .value
32+
33+ if self .head == self .tail :
34+ self .head = None
35+ self .tail = None
36+ else :
37+ self .tail = self .tail .previous
38+ self .tail .next = None
39+
40+ return value
41+
42+ def remove (self , node ):
43+ if node is None :
44+ raise ValueError ("Cannot remove None node" )
45+
46+ if node == self .head == self .tail :
47+ self .head = None
48+ self .tail = None
49+ elif node == self .head :
50+ self .head = node .next
51+ self .head .previous = None
52+ elif node == self .tail :
53+ self .tail = node .previous
54+ self .tail .next = None
55+ else :
56+ node .previous .next = node .next
57+ node .next .previous = node .previous
You can’t perform that action at this time.
0 commit comments