本文共 1729 字,大约阅读时间需要 5 分钟。
在get的时候断开节点得到独立节点,将节点放到head后面
class LRUCache { public: int capacity_,idle_; struct Node{ int key_,val_; Node* next; Node* pre; Node(int key,int val):key_(key),val_(val),next(NULL),pre(NULL){ } }; Node* head=new Node(-1,-1); Node* tail=new Node(-1,-1); unordered_mapmemo; LRUCache(int capacity):idle_(capacity),capacity_(capacity) { head->next=tail; tail->pre=head; } void putHead(Node* node){ node->next=head->next; node->pre=head; head->next->pre=node; head->next=node; } int get(int key) { if(memo.find(key)==memo.end()) return -1; memo[key]->next->pre=memo[key]->pre; memo[key]->pre->next=memo[key]->next; putHead(memo[key]); return memo[key]->val_; } void put(int key, int value) { if(memo.find(key)==memo.end()&&idle_>0){ idle_--; Node* node=new Node(key,value); memo[key]=node; } else if(memo.find(key)==memo.end()&&idle_==0){ Node* node=tail->pre; node->next->pre=node->pre; node->pre->next=node->next; memo.erase(node->key_); node->val_=value; node->key_=key; memo[key]=node; } else if(memo.find(key)!=memo.end()&&memo[key]!=NULL){ memo[key]->val_=value; memo[key]->next->pre=memo[key]->pre; memo[key]->pre->next=memo[key]->next; } putHead(memo[key]); // cout< next->key_< next->val_< get(key); * obj->put(key,value); */
转载地址:http://kqav.baihongyu.com/