/*############################################################################# ## Author: Shaun Reed ## ## Legal: All Content (c) 2020 Shaun Reed, all rights reserved ## ## About: An example of a circular singly linked list ## ## ## ## Contact: shaunrd0@gmail.com | URL: www.shaunreed.com | GitHub: shaunrd0 ## ############################################################################## ## circlesinglelist.h */ #ifndef CIRCLESINGLELIST_H #define CIRCLESINGLELIST_H #include class CircleSingleList { public: CircleSingleList() : tail(NULL) {}; CircleSingleList(const CircleSingleList& rhs); CircleSingleList operator=(CircleSingleList rhs); ~CircleSingleList(); bool insert(int val); bool insert(int val, int key); bool remove(int val); bool replace(int val, int key); void makeEmpty(); bool isEmpty() const; int peek() const; void print() const; bool find(int val) const; private: struct Node { int data; Node *next; Node(): data(), next(NULL) {}; Node(int val): data(val), next(this) {}; }; Node *tail; bool insert(int val, Node *&tail); bool insert(int val, int key, Node *&tail); bool remove(int val, Node *&tail); bool replace(int val, int key, Node *&tail); Node* find(int val, Node *start) const; Node* findPrevious(int val) const; void print(Node *start) const; }; #endif