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); } }
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; }