Skip to content

Commit dfaa471

Browse files
committed
refactored a method to move a node to front, and added slots
1 parent 1cfd6d0 commit dfaa471

2 files changed

Lines changed: 15 additions & 6 deletions

File tree

Sprint-2/implement_lru_cache/linked_list.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
class Node:
2+
__slots__ = ("key", "value", "previous", "next")
3+
24
def __init__(self, key, value):
35
self.key = key
46
self.value = value
57
self.previous = None
68
self.next = None
79

810
class LinkedList:
11+
__slots__ = ("head", "tail")
12+
913
def __init__(self):
1014
self.head = None
1115
self.tail = None
@@ -33,7 +37,7 @@ def pop_tail(self):
3337

3438
def remove(self, node):
3539
if self.head == None and self.tail == None:
36-
return
40+
return None
3741

3842
new_previous = node.previous
3943
new_next = node.next
@@ -66,4 +70,4 @@ def push_tail(self, new_node):
6670
self.tail.next = new_node
6771
new_node.previous = self.tail
6872
self.tail = new_node
69-
return new_node
73+
return new_node
Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from linked_list import LinkedList, Node
22

33
class LruCache:
4+
__slots__ = ("limit", "dict", "linked_list")
5+
46
def __init__(self, limit):
57
if limit <= 0:
68
raise ValueError("limit must be positive")
@@ -12,18 +14,21 @@ def get(self, key):
1214
if key not in self.dict:
1315
return None
1416
else:
15-
most_recent_node = self.linked_list.remove(self.dict[key])
16-
self.linked_list.push_head(most_recent_node)
17-
return most_recent_node.value
17+
return self.move_to_front(self.dict[key]).value
1818

1919
def set(self, key, value):
2020
if key in self.dict:
2121
self.dict[key].value = value
22-
self.get(key)
22+
self.move_to_front(self.dict[key])
2323
else:
2424
if len(self.dict) == self.limit:
2525
removed_node = self.linked_list.pop_tail()
2626
del self.dict[removed_node.key]
2727
self.dict[key] = Node(key, value)
2828
self.linked_list.push_head(self.dict[key])
29+
30+
def move_to_front(self, node):
31+
most_recent_node = self.linked_list.remove(node)
32+
self.linked_list.push_head(most_recent_node)
33+
return most_recent_node
2934

0 commit comments

Comments
 (0)