通常在循环链表的第一个节点前附加一个特殊的节点来作为标记,这个节点称为循环链表的头结点,头结点的数据域为空域,或者按照需要设定。
在这里,我们将a1节点的地址设为first,头结点仅当作特殊标记。如果不想增加头结点,也可以实现单循环链表。
本篇的单循环链表是根据上篇《单链表的实现》上稍作修改而来,有什么好的建议请指点我!
1.头文件
#ifndef CHAIN_H
#define CHAIN_H
#include<iostream>
//带头节点的循环链表,头结点是空表
template<class T>
class chainnode
{
template<class T>
friend class chain;
public:
chainnode() //循环链表设置默认构造函数对数据域不作初始化
{
next = nullptr;//初始化节点时,将该节点指向自己
}
~chainnode()
{
}
void setdata(const T& dat)
{
data = dat;
}
public:
T getdata()
{
return data;
}
chainnode<T>* getnext()
{
return next;
}
private:
T data;
chainnode<T>* next;
};
template<class T>
class chain
{
public:
chain()
{