本文共 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_map        memo;    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/