1- class Node :
2- def __init__ (self , key , value ):
3- self .key = key
4- self .value = value
5- self .previous = None
6- self .next = None
7-
1+ from collections import OrderedDict
82
93class LruCache :
104 def __init__ (self , limit ):
115 if limit <= 0 :
126 raise ValueError ("Limit must be positive" )
137
148 self .limit = limit
9+ < << << << HEAD
1510 self .cache = {} # key -> node
1611 self .head = None # Most recently used
1712 self .tail = None # Least recently used
@@ -48,35 +43,27 @@ def _add_to_head(self, node):
4843 # ---------------------
4944 # Public API
5045 # ---------------------
46+ == == == =
47+ self .cache = OrderedDict ()
48+ >> >> >> > fc65c37 (lru cache update )
5149
5250 def get (self , key ):
53- node = self .cache .get (key )
54- if not node :
51+ if key not in self .cache :
5552 return None
5653
57- # Move to head (recently used)
58- self ._remove_node (node )
59- self ._add_to_head (node )
60-
61- return node .value
54+ # Move key to the end (most recently used)
55+ value = self .cache .pop (key )
56+ self .cache [key ] = value
57+ return value
6258
6359 def set (self , key , value ):
64- node = self .cache .get (key )
65-
66- if node :
67- # Update value and move to head
68- node .value = value
69- self ._remove_node (node )
70- self ._add_to_head (node )
71- return
60+ if key in self .cache :
61+ # Update existing and move to end
62+ self .cache .pop (key )
7263
73- # If full, evict LRU (tail)
74- if len (self .cache ) >= self .limit :
75- lru = self .tail
76- self ._remove_node (lru )
77- del self .cache [lru .key ]
64+ elif len (self .cache ) >= self .limit :
65+ # Remove least recently used (first item)
66+ self .cache .popitem (last = False )
7867
79- # Insert new node
80- new_node = Node (key , value )
81- self ._add_to_head (new_node )
82- self .cache [key ] = new_node
68+ # Insert as most recently used
69+ self .cache [key ] = value
0 commit comments