使用 unordered_map 和 双向链表简单实现的LRU算法,C++实现:第一种是普通写法,第二种是模板类写法。
#include <iostream>
#include <unordered_map>
using namespace std;
struct CacheNode {
int key;
int value;
CacheNode *pre, *next;
CacheNode(int k, int v) : key(k), value(v), pre(nullptr), next(nullptr) {}
};
class LRUCache {
private:
int size;
CacheNode *head, *tail;
unordered_map<int, CacheNode*> mp;
public:
LRUCache(int capacity): size(capacity), head(nullptr), tail(nullptr) {}
void remove(CacheNode *node) {
if (nullptr != node->pre) {
node->pre->next = node->next;
}
else {
head = node->next;
}
if (nullptr != node->next) {
node->next->pre = node->pre;
}
else {
tail = node->pre;
}
}
void setHead(CacheNode *node) {
node->next = head;
node->pre = nullptr;
if (nullptr != head) {
head->pre = node;
}
head = n