package maintype Node struct { key, value int prev, next *Node}type LRUCache struct { capacity int head, tail *Node cache map[int]*Node}func Constructor(capacity int) LRUCache { head, tail := &Node{}, &Node{} head.next = tail tail.prev = head return LRUCache{ capacity: capacity, head: head, tail: tail, cache: make(map[int]*Node), }}func (t *LRUCache) Get(key int) int { node, exist := t.cache[key] if !exist { return -1 } t.remove(node) t.insert(node) return node.value}func (t *LRUCache) Put(key int, value int) { if node, exist := t.cache[key]; exist { t.remove(node) t.insert(&Node{ key: key, value: value, }) return } if len(t.cache) == t.capacity { t.remove(t.head.next) } t.insert(&Node{ key: key, value: value, })}func (t *LRUCache) insert(node *Node) { node.prev = t.tail.prev node.next = t.tail t.tail.prev.next = node t.tail.prev = node t.cache[node.key] = node}func (t *LRUCache) remove(node *Node) { node.prev.next = node.next node.next.prev = node.prev delete(t.cache, node.key)}