File tree Expand file tree Collapse file tree
Sprint-2/implement_lru_cache Expand file tree Collapse file tree Original file line number Diff line number Diff line change 11class 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
810class 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
Original file line number Diff line number Diff line change 11from linked_list import LinkedList , Node
22
33class 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
You can’t perform that action at this time.
0 commit comments