using System.Collections.Generic;
public static void Main()
LRUCache cache = new LRUCache(2);
var getValue = cache.Get(1);
Console.WriteLine(getValue);
private Dictionary<int, LinkedListNode<KeyValuePair<int, int>>> cache;
private LinkedList<KeyValuePair<int, int>> lruList;
public LRUCache(int capacity)
this.capacity = capacity;
this.cache = new Dictionary<int, LinkedListNode<KeyValuePair<int, int>>>(capacity);
this.lruList = new LinkedList<KeyValuePair<int, int>>();
if (cache.TryGetValue(key, out LinkedListNode<KeyValuePair<int, int>> node))
public void Put(int key, int value)
if (cache.TryGetValue(key, out LinkedListNode<KeyValuePair<int, int>> node))
node.Value = new KeyValuePair<int, int>(key, value);
if (cache.Count >= capacity)
LinkedListNode<KeyValuePair<int, int>> lastNode = lruList.Last;
cache.Remove(lastNode.Value.Key);
LinkedListNode<KeyValuePair<int, int>> newNode = new LinkedListNode<KeyValuePair<int, int>>(new KeyValuePair<int, int>(key, value));
lruList.AddFirst(newNode);