#include using namespace std; template struct node { T value; node* next; }; template class queue { public: queue() : _head{nullptr} {} ~queue() { auto iter = _head; while(iter) { delete iter; iter = iter->next; } } queue* enqueue(T val) { if(!_head) { _head = new node{val, nullptr}; _tail = _head; } else { _tail->next = new node{val, nullptr}; _tail = _tail->next; } return this; } node* dequeue() { auto iter = _head; if(!_head) return nullptr; while(iter->next != _tail) { iter = iter->next; } node* elem = iter->next; delete iter->next; iter->next = nullptr; _tail = iter; return elem; } void print() { auto iter = _head; while(iter) { cout << iter->value << ' '; iter = iter->next; } cout << endl; } private: node* _tail; node* _head; }; int main() { queue* q = new queue(); q->dequeue(); q->enqueue(4)->enqueue(2)->enqueue(8); q->print(); auto e = q->dequeue(); if(e) cout << e->value << endl; q->enqueue(1); q->print(); delete q; return 0; }