public DequeElem <T> DetachTail() { if (tail == null) { throw new ApplicationException("Can't pop from an empty deque"); } var tmp = tail; tail = tail.prev; if (tail != null) { tail.next = null; } else // tail == null { head = null; } Count--; tmp.next = null; tmp.prev = null; return(tmp); }
public void PushHead(DequeElem <T> newElem) { Count++; if (Count == 1) // => it was 0 before increment { head = newElem; tail = newElem; return; } newElem.next = head; head.prev = newElem; head = newElem; }
public void Bubble(DequeElem <T> elem) { if (elem == head) { return; } if (elem == tail) { DetachTail(); // changes elem } else // now guaranteed to be in the middle of the deque { elem.prev.next = elem.next; elem.next.prev = elem.prev; Count--; elem.prev = null; elem.next = null; } PushHead(elem); }
public CacheDeque() { Count = 0; head = null; tail = null; }