首页 > 其他分享 >循环链表

循环链表

时间:2022-11-23 17:37:38浏览次数:42  
标签:p2 结点 next 链表 循环 L2 指针

循环链表

介绍

很多时候我们找查询链表内的结点,只能方位当前结点以及其后续的结点,无法访问前面的结点。简单举个例子,就比如使用Windows自带文本文档(记事本)的查找功能时,当你没有勾选循环时,你已经查询了某一关键字之后,要查询另一个关键字在其之前(或者之后),在不知道的情况下选反了(如另一个关键字在现关键字之前,选择了向下查询),就会找不到关键字。这种情况下,我们只要将最后一个结点的next域指针指向链表的第一个结点,就形成了一个环,于是,就出现了单循环链表。这样,无论从哪个结点开始,都可以访问整个链表的所有结点。

两循环链表首尾相连

方法一(没有尾指针的)

假设两个链表为L1、L2,结点p1、p2分别指向两个头结点。两个循环链表需要相连,其实就是表L1的最后一个结点的next指针指向p2的next域,然后表L2的最后一个结点的next指针指向p1的next域,释放掉p2。因为没有定义尾结点,所以需要将每个表都遍历一遍直到尾结点。因为要遍历整个链表,所以其时间复杂度为(假设表L1长度为m,表L2长度为n):O(m+n)。

方法二(带尾指针的)

如果是要将带有尾指针的两个链表进行首尾相连,只需要对指针进行相应的变化即可,无需再进行整个表的遍历,变化如下:

p2=tail2->next;
tail2->next=tail1->next;		//将表L2的尾结点的next域指向表L1的头结点
tail1->next=p2-next;		//将表L1的尾结点的next域指向表L2的首结点(不是头结点!)
free(p2)		//释放表L2的头结点

因为只需要变化指针,所以得出的时间复杂度为:O(1)。

标签:p2,结点,next,链表,循环,L2,指针
From: https://www.cnblogs.com/qinyu33/p/16919083.html

相关文章

  • 循环结构
    循环结构while循环while循环是最基本循环,它的结构为:while(布尔表达式){  //循环内容}只要布尔表达式为true,循环就会一直执行下去。我们大多数情况是会让循......
  • asm实现双循环
    我们用dx,实现cx数据的临时存储;dxbeusedfordoubleloops,itcansavethevalueofcx;doubleloopassumecs:codecodesegmentmovcx,2hmovax,0h......
  • 嵌入式操作系统内核原理和开发(基于链表节点的内存分配算法)
      链接节点的内存分配方法,其实就是一种按需分配的内存分配方法。简单一点说,就是你需要多少内存,我就给你多少内存。当然,为了把分配的内存都连起来,我们还需要对分配节点进......
  • 随想录(为什么循环队列具有先天的并行性)
       循环队列是很多人喜欢用的一种数据结构。本着先来先服务的特性,循环队列是一种十分简单、健壮的数据结构。不像链表、二叉树,如果使用不慎,就会造成很大的麻烦,但是在循......
  • 一步一步写算法(之链表排序)
       相比较线性表的排序而言,链表排序的内容稍微麻烦一点。一方面,你要考虑数据插入的步骤;另外一方面你也要对指针有所顾虑。要是有一步的内容错了,那么操作系统会马上给你......
  • 19.删除链表的倒数第N个节点 remove-nth-node-from-end-of-list
    问题描述19.删除链表的倒数第N个节点解题思路首先设置一个虚拟头节点pre,pre->next=head;双指针法,考虑使用两个指针fast,slow,一快一慢,fast指针先前进n个位置,然后fast和......
  • python 用这样子将链表置None了, 为什么没有成功?
    res=ListNode(1)res.next=ListNode(2)#res1->2方式1打印12,这里是为什么?res1=res.nextres1=None方式2打印1res.next=Nonewhileres:pr......
  • C语言循环
    文章目录​​一、程序结构​​​​二、while循环​​​​三、dowhile循环​​​​四、循环的跳转​​​​五、while循环的应用​​​​六、for循环​​​​七、for循环嵌套......
  • 奇偶链表问题
    奇偶链表问题作者:Grey原文地址:博客园:奇偶链表问题CSDN:奇偶链表问题题目描述给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节......
  • 嵌入式学习-链表
    链表是一种数据结构,它相对于数组来说十分灵活,它存放着一个数据和指向下一个数据的地址(指针)。链表和数组的区别在于,数组是连续的,而链表可以是不连续的。  输出结果:......