Skip to content

Commit db3a7b6

Browse files
committed
Blocks removal of head or tail of double linked list
1 parent 69054ba commit db3a7b6

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

other/lru_cache.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,11 @@ class DoubleLinkedList:
7676
True
7777
7878
>>> # Attempt to remove head or rear
79-
>>> # removed_node = dll.remove(DoubleLinkedListNode(None, None))
79+
>>> dll.rear
80+
Node: key: None, val: None, has next: False, has prev: True
81+
>>> dll.remove(dll.rear) is None
82+
True
83+
8084
8185
"""
8286

@@ -103,14 +107,22 @@ def add(self, node: DoubleLinkedListNode) -> None:
103107
temp.next, node.prev = node, temp
104108
self.rear.prev, node.next = node, self.rear
105109

106-
def remove(self, node: DoubleLinkedListNode) -> DoubleLinkedListNode:
110+
def remove(self, node: DoubleLinkedListNode) -> DoubleLinkedListNode | None:
107111
"""
108112
Removes and returns the given node from the list
113+
114+
Returns None if node.prev or node.next is None
109115
"""
110116

111-
temp_last, temp_next = node.prev, node.next
112-
node.prev, node.next = None, None
113-
temp_last.next, temp_next.prev = temp_next, temp_last
117+
if node.prev is None:
118+
return None
119+
elif node.next is None:
120+
return None
121+
else:
122+
node.prev.next = node.next
123+
node.next.prev = node.prev
124+
node.prev = None
125+
node.next = None
114126

115127
return node
116128

0 commit comments

Comments
 (0)