单向循环链表

创建单向循环链表

cs 复制代码
linklist create_h(){
	linklist p=(linklist)malloc(sizeof(struct Node));
	if(p==NULL)return NULL;
	p->len=0;
	p->next=p;//开始就让头节点指向自身
	return p;
}

创建节点

cs 复制代码
linklist create(){
	linklist p=(linklist)malloc(sizeof(struct Node));
	if(p==NULL)return NULL;
	p->data=0;
	p->next=NULL;
	return p;
}

头插

cs 复制代码
int insert_head(linklist p,datatype data){
	if(p==NULL)return -1;
	linklist q=create();
	if(q==NULL)return -1;
	q->next=p->next;//若是第一个元素,则q指向头节点完成循环
	p->next=q;
	q->data=data;
	p->len++;
	return 0;
}

按位置插入

cs 复制代码
int insert_index(linklist p,int index,datatype key){
	if(p==NULL||index>p->len+1||index<1){
		return -1;
	}
	linklist q=p;
	for(int i=0;i<p->len-1;i++){
		q=q->next;
	}
	linklist k=create();
	if(k==NULL)return -1;
	k->data=key;
	k->next=q->next;
	q->next=k;
	p->len++;
	return 0;
}

尾删

cs 复制代码
int dele_rear(linklist p){
	if(p==NULL||p->len==0)return -1;
	linklist q=p;
	for(int i=0;i<p->len-1;i++)
		q=q->next;
	q->next=mfree(q->next);
    q->next=p;
	p->len--;
	return 0;
}

输出

cs 复制代码
int output(linklist p){
	puts("");
	if(p==NULL||p->len==0)return -1;
	linklist q=p;
	for(int i=0;i<p->len;i++){
		q=q->next;
		printf("%d\t",q->data);
	}
	putchar(10);
	return 0;
}

按位置删

cs 复制代码
int dele_index(linklist p,int index){
	if(p==NULL||index>p->len||index<1)return -1;
	linklist q=p;
	for(int i=0;i<index-1;i++){
		q=q->next;
	}
	linklist k=q->next;
	q->next=k->next;
	k=mfree(k);
	p->len--;
	return 0;
}
相关推荐
无聊的小坏坏13 分钟前
一文详解前缀和:从一维到二维的高效算法应用
数据结构·算法
梦境虽美,却不长38 分钟前
数据结构 学习 图 2025年6月14日 12点57分
数据结构·学习·
houliabc39 分钟前
【无标题】【2025年软考中级】第三章数据结构3.2 栈与队列
数据结构
蒙奇D索大40 分钟前
【数据结构】图论最短路圣器:Floyd算法如何用双矩阵征服负权图?
数据结构·算法·矩阵·图论·图搜索算法
黑听人3 小时前
【力扣 简单 C】141. 环形链表
c语言·开发语言·数据结构·算法·leetcode
谷雨不太卷3 小时前
AVL树的实现
数据结构·c++·算法
大熊猫侯佩4 小时前
Swift 初学者交心:在 Array 和 Set 之间我们该如何抉择?
数据结构·性能优化·swift
BAGAE4 小时前
使用 Flutter 在 Windows 平台开发 Android 应用
android·大数据·数据结构·windows·python·flutter
liujing102329297 小时前
Day13_C语言基础&项目实战
c语言·开发语言
UP_Continue7 小时前
排序--计数排序
数据结构·算法