目录
在学习循环链表之前,我们需要先知道单链表~
https://blog.csdn.net/m0_70184760/article/details/124728218?spm=1001.2014.3001.5501
https://blog.csdn.net/m0_70184760/article/details/124728218?spm=1001.2014.3001.5501 循环链表其实就是把单链表的尾结点的next域不指向NULL,而是指向头结点的地址
我们直接来看代码吧~ 代码设计跟单链表的没差多少,主要就是注意尾结点指针域的修改就行了
结构体的设计
typedef int ElemType;
typedef struct CNode {
ElemType data; //数据域
struct CNode* next; //指针域
}CNode,*PCNode;
初始化
这里的初始化和单链表的是一样的呢~
//初始化
void Init_CList(PCNode plist) {
assert(plist != NULL);
if (plist == NULL) return;
//头结点的数据域不存放内容,所以不用初始化
plist->next = plist;
}
在这里再提醒一下哦~
结点自身地址和此结点的指针域是不一样的,结点的指针域是其下一个要指向结点的自身地址
插入——头插
bool Insert_head(PCNode plist, ElemType val) {
assert(plist != NULL);
if (plist == NULL) return false;
struct CNode* pnewnode = (struct CNode*)malloc(sizeof(struct CNode));
assert(pnewnode != NULL);
if (pnewnode == NULL) return false;
pnewnode->data = val;
pnewnode->next = plist