循环链表定义
定义与单链表一样,操作时将末结点的指针指向开始结点即可
typedef struct _LinkNode
{
int data;
struct _LinkNode *next;
}LinkList;
循环链表操作
初始化循环链表
bool InitList(LinkList* &L)
{
L = new LinkList;
if(!L) return false;
L->next = L;
L->data = 0; //往头结点塞个数据,这时候严格来讲为无头结点循环链表,第一个结点应该叫开始结点
return true;
}
插入(尾插)
bool ListInsert_back(LinkList* &L, LinkList *node)
{
LinkList *last = NULL;
if(!L || !node) return false;
if(L == L->next)
{
//头结点指针指向了自己(链表只有头结点)
node->next = L;
L->next = node;
}else{
//非空的循环链表
last = L->next;
//寻找尾结点(指向头结点的结点)
while(last->next != L)
{
last = last->next;
}
node->next = L;
last->next = node;
}
return true;
}
输出数据
void LinkListPrint(LinkList *L)
{
LinkList *p;
if(!L || L == L->next)
{
cout << "链表为空\n";
return;
}
p = L->next;
while(p != L)
{
cout << p->data << "\t";
p = p->next;
}
cout << endl;
}