lru-cache.py
linked-lists/lru-cache.py · Python · 1.5 KiB · 2026-02-21 15:49
# LRU Cache implementation using a doubly linked list and a hash map for O(1) access. # linked-lists class Node: def __init__(self, key: int, val: int): self.key, self.val = key, val self.next = self.prev = None # O(1) time for get and put, O(capacity) space class LRUCache: def __init__(self, capacity: int): self.capacity = capacity self.map : dict[int, Node] = {} self.head, self.tail = Node(0, 0), Node(0, 0) self.head.next = self.tail self.tail.prev = self.head def _delete(self, node: Node): """Delete a linked list node""" node.prev.next = node.next node.next.prev = node.prev del node # not really needed def _insert_in_front(self, node: Node): """Insert a node at the start of the linked list""" prev, nxt = self.head, self.head.next nxt.prev = prev.next = node node.prev, node.next = prev, nxt def get(self, key: int) -> int: if key not in self.map: return -1 node = self.map[key] self._delete(node) self._insert_in_front(node) return node.val def put(self, key: int, value: int) -> None: if key in self.map: self._delete(self.map[key]) del self.map[key] self.map[key] = Node(key, value) self._insert_in_front(self.map[key]) if len(self.map) > self.capacity: lru = self.tail.prev self._delete(lru) del self.map[lru.key]