双向链表加map

public class LRUCache {

        class LinkNode{
            int key;
            int val;
            LinkNode pre;
            LinkNode next;
            public LinkNode(){}
            public LinkNode(int key,int val){
                this.key = key;
                this.val = val;
            }
        }

        private Map<Integer, LinkNode> mp = new HashMap<Integer, LinkNode>();
        private int capacity;
        private LinkNode head,tail;
        private int size;

        public LRUCache(int capacity) {
            this.capacity = capacity;
            this.size = 0;
            head = new LinkNode();
            tail = new LinkNode();
            head.next = tail;
            tail.next = head;
        }

        public int get(int key) {
            if(mp.get(key) == null) return -1;
            else{
                LinkNode lk = mp.get(key);
                moveToHead(lk);
                return lk.val;
            }
        }

        public void put(int key, int value) {
            if(mp.get(key) == null){
                LinkNode lk = new LinkNode(key, value);
                mp.put(key, lk);
                addToHead(lk);
                size++;

                if(size > capacity){
                    LinkNode res = tail.pre;
                    removeNode(res);
                    mp.remove(res.key);
                    size--;
                }
            }
            else{
                LinkNode lk = mp.get(key);
                lk.val = value;
                moveToHead(lk);
            }
        }


        private void removeNode(LinkNode lk){
            lk.pre.next = lk.next;
            lk.next.pre = lk.pre;
        }

        private void addToHead(LinkNode lk){
            lk.pre = head;
            lk.next = head.next;
            head.next.pre = lk;
            head.next = lk;
        }

        private void moveToHead(LinkNode lk){
            removeNode(lk);
            addToHead(lk);
        }


}

/**
 * Your LRUCache object will be instantiated and called as such:
 * LRUCache obj = new LRUCache(capacity);
 * int param_1 = obj.get(key);
 * obj.put(key,value);
 */