单项循环链表
單項循環鏈表
// // Created by 許加權 on 2021/7/12. //#ifndef C11LEARN_SINGLECYCLELINK_H #define C11LEARN_SINGLECYCLELINK_H #include "chapter10.h" template<typename T> class SingleCycleL { public:HalfNode<T> *Nil; public:SingleCycleL(){Nil = new HalfNode<T>();Nil->next = Nil;}SingleCycleL(const SingleCycleL<T> &l){Nil = new HalfNode<T>();Nil->next = Nil;copy(l);}const SingleCycleL<T>& operator = (const SingleCycleL<T> &l){clear();copy(l);return *this;}virtual ~SingleCycleL(){clear();if(Nil!= nullptr){delete Nil;Nil = nullptr;}}void clear(){HalfNode<T>* current = Nil->next;while (current != Nil){HalfNode<T>*node = current;current = current->next;delete node;}Nil->next = Nil;}void copy(const SingleCycleL<T> &l){HalfNode<T>* current = l.Nil->next;HalfNode<T>* current_self = Nil;while (current!= l.Nil){HalfNode<T> * node = new HalfNode<T>(current->key);current = current->next;current_self->next = node;current_self = node;}current_self->next = Nil;} }; template<typename T> void insert(SingleCycleL<T> & l,T key) {HalfNode<T> * t = new HalfNode<T>(key);t->next = l.Nil->next;l.Nil->next = t; } template<typename T> bool remove(SingleCycleL<T> & l,T key) {HalfNode<T> *pre = l.Nil;HalfNode<T> *current = l.Nil->next;while (current->key!=key){pre = current;current = current->next;}if(current != l.Nil){pre->next = current->next;delete current;return true;}return false; } template<typename T> HalfNode<T> search(SingleCycleL<T> & l,T key) {l.Nil->key = key;HalfNode<T> *current = l.Nil->next;while (current->key!=key){current = current->next;}return current; } #endif //C11LEARN_SINGLECYCLELINK_H輔助類HalfNode鏈接
總結
- 上一篇: 如何画雪花
- 下一篇: Θ(n)反转单链表(算法导论第三版第十章