Ejemplo n.º 1
0
        public void AddFront(DLLNode node)
        {
            node.next = DummyTail;
            node.prev = DummyTail.prev;

            DummyTail.prev.next = node;
            DummyTail.prev      = node;
        }
Ejemplo n.º 2
0
        public LRUCache(int capacity)
        {
            Size     = 0;
            Capacity = capacity;

            DummyHead = new DLLNode(0, 0);
            DummyTail = new DLLNode(0, 0);

            DummyTail.prev = DummyHead;
            DummyHead.next = DummyTail;

            map = new Dictionary <int, DLLNode>();
        }
Ejemplo n.º 3
0
        public int GetValue(int key)
        {
            if (!map.ContainsKey(key))
            {
                return(-1);
            }

            DLLNode node = map[key];

            RemoveLast(node);
            AddFront(node);

            return(node.val);
        }
Ejemplo n.º 4
0
        public void SetValue(int key, int value)
        {
            if (map.ContainsKey(key))
            {
                DLLNode node = map[key];
                node.val = value;
                RemoveLast(node);
                AddFront(node);
            }
            else
            {
                if (Size == Capacity)
                {
                    map.Remove(DummyHead.next.key);
                    RemoveLast(DummyHead.next);
                    Size--;
                }

                DLLNode node = new DLLNode(key, value);
                map.Add(key, node);
                AddFront(node);
                Size++;
            }
        }
Ejemplo n.º 5
0
 public void RemoveLast(DLLNode node)
 {
     node.next.prev = node.prev;
     node.prev.next = node.next;
 }