原书对循环链表的介绍很简略,实现部分也不完整(当然了,如果完整就又是重复建设)。而我也没觉得循环链表有什么别的用,他更应该是为了一个特殊的问题而产生的,这只是个人的看法。我从链表类派生出了循环链表,这需要注意几个细节。
1. 构造函数:派生类实例化时,先调用基类的构造函数;因此,初始化循环链表的工作就是将带表头的空链表的表头节点的link指向表头节点,从而构成一个圈。
2. 析构函数:释放对象时,先调用派生类的析构函数,然后调用基类的析构函数。因此,释放循环链表只需要将循环链表变成普通的单链表,然后这个单链表会被基类的析构函数释放。这里假定不使用这种语句base *p = new drived;delete p;因为我在~list()前面没有加virtual。你可以参阅各种c++书籍搞清这类问题。
3. 判空函数:条件不是检测头节点的link是否为空,而是是否指向头节点。
4. 置空函数:原来的显然不能工作了,实际上只要从表头位置不断后删直到表空就可以了。
5. next():遇到表头节点要跳过去。