#pragma once using ItemT = int; struct NodeT; class ListT { public: ListT() = default; ListT(const ListT &) = delete; ListT(ListT &&) = delete; ListT & operator =(const ListT &) = delete; ListT & operator =(ListT &&) = delete; ~ListT(); void PushFront(ItemT); void PopFront(); size_t Size() const; void Home(); bool Next(); bool AtEnd(); ItemT & Data(); private: size_t size{0}; NodeT * head{nullptr}, * tail{nullptr}; NodeT * ptr{nullptr}; };