class Node:
def __init__(self,key, val, prev=None,nex=None):
self.key = key
self.val = val
self.pre = prev
self.next = nex
class LRUCache:
def __init__(self, capacity: int):
self.capacity = capacity
self.nodeMap = dict()
self.dummy = Node(-1,-1)
self.tail = Node(0,0,self.dummy)
self.dummy.next = self.tail
def get(self, key: int) -> int:
if key in self.nodeMap:
node = self.nodeMap[key]
self.deleteNode(node)
self.addToHead(node)
return node.val
else:
return -1
def put(self, key: int, value: int) -> None:
if key in self.nodeMap:
self.nodeMap[key].val = value
self.get(key)
else:
node = Node(key, value)
self.nodeMap[key] = node
self.addToHead(node)
if len(self.nodeMap) > self.capacity:
last = self.tail.pre
del self.nodeMap[last.key]
self.deleteNode(last)
def addToHead(self, node: Node) -> None:
nex = self.dummy.next
nex.pre = node
self.dummy.next = node
node.next = nex
node.pre = self.dummy
def deleteNode(self, node: Node) -> None:
nex = node.next
pre = node.pre
pre.next = nex
nex.pre = pre
s = LRUCache(2)
s.put(1,1)
s.put(2,2)
s.get(1)
s.put(3, 3)
s.get(2)
s.put(4,4)
s.get(1)
s.get(3)
s.get(4)
07-27
860
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)