环状链表是链表的特殊形式,其区别在于将循环中的判断条件NULL更换成first,
而insert()等查函数根据实际情况考虑是否有越界循环情况
其他大部分相同
代码如下
#include<iostream>
using namespace std;
template<class T>
struct LinkNode
{
T data;
LinkNode<T>* link;
LinkNode(LinkNode<T>* ptr = NULL) {
link = ptr; }
LinkNode(T item, LinkNode<T>* ptr = NULL) {
link = ptr; data = item; }
};
template<class T>
class CircleList
{
private:
LinkNode<T>* first;
public:
CircleList() {
first = new LinkNode<T>; first->link = first; }
CircleList(CircleList<T>& L);
~CircleList();
int Length()const;
bool isEmpty()const;
CircleList<T>* getHead()const {
return first; }
CircleList<T>* Search(T x)const;
T getData(int i)const;
void setData(int i, T x);
bool insert(int i, T x);
bool remove(int i, T& x);