node * tmp2 = tail -> pre; tmp2 -> next = tmp; tmp -> next = tail; tail -> pre = tmp; tmp -> pre = tmp2; if(size > capacity) { node * p = head -> next; head -> next = p -> next; p -> next -> pre = head; mp.erase(p -> key); delete p; size--; } } else { node * p = mp[key]; p -> value = value; node * tmp1 = p -> pre; node * tmp2 = p -> next; tmp1 -> next = tmp2; tmp2 -> pre = tmp1; node * tmp3 = tail -> pre; tmp3 -> next = p; p -> next = tail; tail -> pre = p; p -> pre = tmp3; } } };
/** * 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); */