程序员求职经验分享与学习资料整理平台

网站首页 > 文章精选 正文

数据结构与算法——带你走进循环链表的相关操作

balukai 2025-05-15 16:29:37 文章精选 4 ℃

持续分享嵌入式技术,操作系统,算法,c语言/python等,欢迎小友关注支持

本篇文章我们一起走进循环链表的世界,其实循环链表与带链表差别并不大,如字面意思一样,循环链表就是将尾结点指向了头结点

循环链表的基本概念

将单链表最后一个结点的指针域由NULL改为指向头结点或线性表中的第一个结点,就得到了单链形式的循环链表,并称为循环单链表。

在循环单链表中,表中所有结点被链在一个环上。

了解了基本概念,我们来看一下循环链表的分类,循环链表的分类主要有以下几种,如下图所示。

如上图所示,循环链表主要分为3类

  • 带头结点的空循环链表
  • 带头指针的循环单链表
  • 带为指针的循环单链表

空链表很简单其实就是head = null我们主要看下后面两种,我们还是举例说明,这样更加直观一点

如何将两个循环单链表合并成一个循环单链表呢,这个代码要如何编写。接下来一一献上代码。

两个带头结点的循环单链表合并

有两个带头结点的循环单链表LA、LB,编写一个算法,将两个循环单链表合并为一个循环单链表,其头指针为LA。

实现方法:

  1. 找到两个链表的尾,并分别由指针p、q指向它们
  2. 将第一个链表的尾与第二个表的第一个结点链接起来,
  3. 修改第二个表的尾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);
}

如果觉得文章对你有帮助,请点赞关注下。如有错误欢迎指正

最近发表
标签列表