持续分享嵌入式技术,操作系统,算法,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);
}
如果觉得文章对你有帮助,请点赞关注下。如有错误欢迎指正