单向循环链表的基本操作与单向链表有很多相似的,差别在于链表结束的判断条件,最后一个结点不再是指向NULL,而是指向头结点,将头尾连起来
代码如下关键在于判断链表终止的条件尾元素->头结点
#include <iostream>
#include <cstdlib>
using namespace std;
template<typename T>
struct Node{ //结点
T data;
Node<T> *next;
};
template<typename T>
class CirList{
private:
Node<T> *tail = NULL; //尾指针
public:
CirList(); //创建空循环链表(带头结点)
~CirList(); //完成摧毁操作
void CreateCirList(int n); //创建表长为n的循环链表
void Insert(int i, T e); //在i位置插入值e
T Delete(int i); //删除i位置的值并返回它
int Length(); //返回表长
bool Empty(); //检查表是否为空
void Clear(); //清空表
void CirListTraverse(); //遍历表中的元素
void Connect(CirList<T> &lst2); //将两个循环链表连接起来
void Part(CirList<T> &lst2, int i); //从i位置开始将后面的拆分到lst2
};
//创建容量为m的空循环链表
template<typename T>
CirList<T>::