#include #include #include struct Node { std::string name{}; Node* prev{}; Node* next{}; }; class Whisper_List { public: Whisper_List() : first{}, last{}, current{}, forward{true} {} Whisper_List(Whisper_List const&) = delete; Whisper_List& operator=(Whisper_List const&) = delete; Whisper_List(Whisper_List && rhs) : Whisper_List() { *this = std::move(rhs); } ~Whisper_List() { while ( first ) { Node* victim{first}; first = first->next; delete victim; } } Whisper_List& operator=(Whisper_List && rhs) { std::swap(first, rhs.first); std::swap(last, rhs.last); std::swap(current, rhs.current); std::swap(forward, rhs.forward); return *this; } void insert(std::string const& name) { if ( first == nullptr ) { first = last = new Node{name}; } else { last->next = new Node{name, last}; last = last->next; } } void reset() { current = first; forward = true; } bool has_next() { return current != nullptr; } std::string& get_current() { return current->name; } void next() { if ( forward ) current = current->next; else current = current->prev; if ( current == nullptr && forward ) { forward = false; current = last; } } private: Node* first; Node* last; Node* current; bool forward; }; /* Ska skriva ut: Klas Christoffer Pontus Filip Pia Janos Daniel David David Daniel Janos Pia Filip Pontus Christoffer Klas */ int main() { Whisper_List l; l.insert("Klas"); l.insert("Christoffer"); l.insert("Pontus"); l.insert("Filip"); l.insert("Pia"); l.insert("Janos"); l.insert("Daniel"); l.insert("David"); l.reset(); while ( l.has_next() ) { std::cout << l.get_current() << std::endl; l.next(); } return 0; }