// ... (part of class LinkedQueue)
void enqueue(const Object& e) { // enqueue element
NodePtr v = new Node(e, NULL);
if (sz == 0) head = v; // if empty, this is new head
else tail->next = v; // else link after tail
tail = v; // v is now the tail
sz++;
}
Object dequeue() throw(QueueEmptyException) { // dequeue
if (isEmpty())
throw QueueEmptyException("Dequeue of empty queue");
NodePtr old = head; // node to remove
head = head->next;
if ((--sz) == 0) tail = NULL; // deletion causes empty queue
Object result = old->element;
delete old;
return result;
}
// ...