[LeetCode]LRUcache题解(不使用STL容器)

来源:互联网 发布:安卓人肉软件 编辑:程序博客网 时间:2024/06/06 19:36

Design and implement a data structure for Least Recently Used (LRU) cache. It should support the following operations: get and set.

get(key) - Get the value (will always be positive) of the key if the key exists in the cache, otherwise return -1.
set(key, value) - Set or insert the value if the key is not already present. When the cache reached its capacity, it should invalidate the least recently used item before inserting a new item.

用链表实现的,没用使用map。感觉使用map有作弊的感觉。

#include <iostream>#include <stack>#include <vector>#include <string>#include <stdlib.h>#include <sstream>#include <algorithm>#include <map>using namespace std;class LRUCache{public:    struct LinkNode {        int key,val;        LinkNode *next;        LinkNode(int key,int value) : val(value) ,key(key), next(nullptr){}    };    int size,capacity;    LinkNode *head,*tail;    LRUCache(int capacity) {        this->capacity = capacity;        this->size = 0;                this->tail = this->head = nullptr;    }        int get(int key) {        if(head == nullptr)return -1;        LinkNode* p = head;        if(head->key == key){            tail->next = head;            tail = head;            head = tail->next;            tail->next = nullptr;            return tail->val;        }        while (p->next != nullptr) {            if(p->next->key == key){                tail->next = p->next;                tail = p->next;                p->next = tail->next;                tail->next = nullptr;                return tail->val;            }            p = p->next;        }        return -1;    }        void set(int key, int value) {        LinkNode* p = head;        if(p!=nullptr&&head->key == key){            tail->next = head;            tail = head;            tail->val = value;            head = tail->next;            tail->next = nullptr;            return;        }        while (p!=nullptr&&p->next != nullptr) {            if(p->next->key == key){                tail->next = p->next;                tail = p->next;                tail->val = value;                p->next = tail->next;                tail->next = nullptr;                return;            }            p = p->next;        }        LinkNode* newnode = new LinkNode(key,value);        if(size >= capacity)            head = head->next;        else            ++size;                if(head == nullptr)            head = newnode;        else            tail->next = newnode;        tail = newnode;        return;    }};int main(){    auto cache = new LRUCache(2);    cache->set(1, 1);    cache->set(2,2);    cache->set(2,3);    cout<<cache->get(2)<<endl;    //system("pause");    }


0 0
原创粉丝点击