---------------start reading---------------
前言
在知道熟悉单链表的操作后,我们知道链表有一个数据域存放具体的数据,有一个next域存放后继的地址,如果我们将尾结点的next域指向之前的任意一个节点,那么就形成了一个环。
下面我们就来说说循环链表
如图就是一个循环链表
在对循环链表进行操作时要注意尾结点的后继不是NULL,而是plist
循环条件要从p->next!=NULL变成p->next!=plist
循环链表可以防止空指针解引用而引起的崩溃,同时也有一定风险会死循环。
下面是循环链表的操作
定义头文件
#pragma once
typedef struct CNode
{
int data;
struct CNode *next;
}CNode,*CList;
//链表初始化
void InitList(CList plist);//Node*
//头插
bool Insert_head(CList plist,int val);
//尾插
bool Insert_tail(CList plist,int val);
//查找
CNode *Srearch(CList plist,int key);
//删除
bool Delete(CList plist,int key);
//获取长度
int GetLeng