网站首页 > 文章精选 正文
持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持
本篇文章我们一起走进循环链表的世界,其实循环链表与带链表差别并不大,如字面意思一样,循环链表就是将尾结点指向了头结点。
循环链表的基本概念
将单链表最后一个结点的指针域由NULL改为指向头结点或线性表中的第一个结点,就得到了单链形式的循环链表,并称为循环单链表。
在循环单链表中,表中所有结点被链在一个环上。
了解了基本概念,我们来看一下循环链表的分类,循环链表的分类主要有以下几种,如下图所示。
如上图所示,循环链表主要分为3类
- 带头结点的空循环链表
- 带头指针的循环单链表
- 带为指针的循环单链表
空链表很简单其实就是head = null我们主要看下后面两种,我们还是举例说明,这样更加直观一点
如何将两个循环单链表合并成一个循环单链表呢,这个代码要如何编写。接下来一一献上代码。
两个带头结点的循环单链表合并
有两个带头结点的循环单链表LA、LB,编写一个算法,将两个循环单链表合并为一个循环单链表,其头指针为LA。
实现方法:
- 找到两个链表的尾,并分别由指针p、q指向它们
- 将第一个链表的尾与第二个表的第一个结点链接起来,
- 修改第二个表的尾q,使它的链域指向第一个表的头结点。
代码实现:
LinkList merge_1(LinkList LA,LinkList LB)
{
LNode *p, *q;
p=LA;
q=LB;
while (p->next!=LA)
p=p->next;
while (q->next!=LB)
q=q->next;
p->next=LB->next;
free(LB);
q->next=LA;
return(LA);
}
两个带为指针的循环单链表合并
有两个带头结点的循环单链表LA、LB,编写一个算法,将两个循环单链表合并为一个循环单链表,其头指针为LA。
尾指针的操作就相对简单了,我们只需要修改两个链表的尾指针就行了。
代码实现:
LinkList merge_2(LinkList RA,LinkList RB)
{
LNode *p;
p=RA->next;
RA->next=RB->next->next;
free(RB->next);
RB->next=p;
return(RB);
}
如果觉得文章对你有帮助,请点赞关注下。如有错误欢迎指正
- 上一篇: 二叉树展开为链表-迭代法
- 下一篇: 数据结构错题收录(十八)
猜你喜欢
- 2025-05-15 C语言创建链表
- 2025-05-15 看一遍就理解,图解单链表反转
- 2025-05-15 C++:挑战鹅厂面试题(一)--反转链表
- 2025-05-15 数据结构:单链表算法题,常见技巧套路心得分享
- 2025-05-15 那些经典算法:跳表
- 2025-05-15 数据结构错题收录(十八)
- 2025-05-15 二叉树展开为链表-迭代法
- 05-15C语言创建链表
- 05-15看一遍就理解,图解单链表反转
- 05-15C++:挑战鹅厂面试题(一)--反转链表
- 05-15数据结构:单链表算法题,常见技巧套路心得分享
- 05-15那些经典算法:跳表
- 05-15数据结构错题收录(十八)
- 05-15数据结构与算法——带你走进循环链表的相关操作
- 05-15二叉树展开为链表-迭代法
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)