Ejemplo n.º 1
0
        public void Put(int key, int value)
        {
            if (capacity == 0)
            {
                return;
            }
            var node = GetNode(key);

            if (node == null)
            {
                if (count == capacity)
                {
                    var exHeadKey = head.key;
                    head = head.next;
                    if (head == null)
                    {
                        tail = null;
                    }
                    else
                    {
                        head.prev = null;
                        if (head == tail)
                        {
                            tail.prev = null;
                        }
                    }
                    dic.Remove(exHeadKey);
                    count--;
                }
                node = new DoublyListNode(key, value);
                if (head == null && tail == null)
                {
                    head = node;
                    tail = node;
                }
                else
                {
                    tail.next = node;
                    node.prev = tail;
                    tail      = node;
                }
                dic.Add(key, node);
                count++;
            }
            else
            {
                node.val = value;
                dic[key] = node;
                MoveToTail(node);
            }
        }
Ejemplo n.º 2
0
 private void MoveToTail(DoublyListNode node)
 {
     if (node == null || node.next == null)
     {
         return;                                                //it is tail already
     }
     if (node.prev == null)
     {
         head           = node.next;
         node.next.prev = null;
     }
     else
     {
         node.prev.next = node.next;
         node.next.prev = node.prev;
     }
     tail.next = node;
     node.prev = tail;
     tail      = node;
 }