template class CLNode { public: CLNode(const T& el); T data; CLNode *next; }; template void CircularList::addToTail(const T& item) { if(tail == nullptr) { tail = new CLNode(item); tail->next = tail; } else { CLNode *newNode = new CLNode(item); newNode->next = tail->next; tail->next = newNode; tail = newNode; } } template void CircularList::removeFromFront() { if(tail == nullptr) return; if(tail->next == tail) { delete tail; tail = nullptr; } else { CLNode *toDelete = tail->next; tail->next = toDelete->next; delete toDelete; } }