首页 / 知识
关于数据结构:测试链表是否具有循环的最佳算法
2023-04-13 14:40:00

Best algorithm to test if a linked list has a cycle确定链表中是否有循环的最佳(停止)算法是什么? [Edit]对时间和空间的渐进复杂性进行分析将很不错,因此可以更好地比较答案。 [编辑]最初的问题不是要解决outdegree> 1的节点,但是有一些讨论。 这个问题更像是"在有向图中检测循环的最佳算法"。 有两个指针遍历列表。使一个迭代速度是另一个迭代速度的两倍,并比较每个步骤的位置。在我的头顶上,像这样:
O(n),尽你所能。 取两个指针* p和* q,开始使用两个指针遍历链接列表" LL": 1)指针p每次都会删除前一个节点并指向下一个节点。 2)指针q每次只会向前方向移动。 条件: 1)指针p指向null,q指向某个节点:存在循环 2)两个指针都指向null:没有循环 前提条件:跟踪列表大小(在添加或删除节点时更新列表大小)。 循环检测: 在遍历列表大小时保留一个计数器。 如果计数器超过列表大小,则可能存在一个周期。 复杂度:O(n) 注意:计数器和列表大小之间的比较以及列表大小的更新操作必须是线程安全的。
def has_cycle(head):
这是使用哈希表(实际上只是一个列表)来保存指针地址的解决方案。
" Hack"解决方案(应在C / C ++中运行):
时间复杂度为2n。看起来它没有使用任何时间变量。 在列表的开头初始化了两个指针。一个指针在每个步骤中前进一次,而另一个指针在每个步骤中前进两次。如果较快的指针再次遇到较慢的指针,则列表中将存在一个循环。否则,如果速度更快的列表到达列表的末尾,则没有循环。 下面的示例代码是根据此解决方案实现的。速度较快的指针为pFast,速度较慢的指针为pSlow。
我的博客上提供了该解决方案。博客中讨论了另一个问题:列表中有循环/循环时,入口节点是什么? 您将必须访问每个节点来确定这一点。这可以递归完成。为了阻止您访问已访问的节点,您需要一个标记来表示"已访问"。当然,这不会给您循环。因此,请使用数字代替位标志。从1开始。检查连接的节点,然后将其标记为2,然后递归直到网络被覆盖。如果在检查节点时遇到的节点比当前节点小一个以上,则您有一个循环。周期长度由差值给出。
|
最新内容
相关内容
linux循环复制命令?
linux循环复制命令?,系统,文件,命令,目录,地址,源文件,文件夹,目标,文件名,路径,linux下怎么把一个文件复制到多个文件夹里可以使用cp命令来实linux命令行写循环?
linux命令行写循环?,工作,系统,地址,命令,情况,定期,基础,连续,信息,文件,Linux常用基本命令大全介绍linux常用命令:pwd命令该命令的英文解释为linux循环命令脚本?
linux循环命令脚本?,代码,系统,增长,工具,官网,项目,流程,数据,数字,底部,linux脚本,在一个循环中赋值一个数组1、通过数组遍历,逐个赋值。定义linux跳出死循环命令?
linux跳出死循环命令?,系统,地址,数字,代码,官方网站,网络,工作,工具,信息,软件,Linux终止前台进程的命令1、方法在“Terminal”终端输入“gnolinux循环语句命令?
linux循环语句命令?,地方,增长,数字,语句,流程,名称,工具,代码,数据,条件,Linux入门系列——awk命令详解1、其中command是真正的awk命令,-F表示dolinux循环命令?
dolinux循环命令?,系统,工具,时间,信息,增长,代码,对比,数字,官网,定期,如何在linux命令行中循环执行命令1、输入命令按下enter键就会开始执行Python3实现旋转数组的3种算法
Python3实现旋转数组的3种算法,位置,代码,时间,培训,算法,数组,解法,结果,长度,索引,下面是Python3实现的旋转数组的3种算法。一、题目给定一Python算法是什么?有哪几类?
Python算法是什么?有哪几类?,数据,数字,时间,算法,系统,策略,位置,有限,标准,培训,了解Python的人应该都听说过Python算法,但是它们的类型和定义对数组使用Python For循环
对数组使用Python For循环,名称,培训,代码,健康,水牛,数组,元素,有用,下面,以上,您可以使用for循环从数组中获取特定元素。假设您有一组水牛bFor循环如何在Python中工作
For循环如何在Python中工作,工作,项目,代码,培训,流程,示例,序列,语句,语法,实际,Python的for循环通过遍历数组的序列来工作。从本质上讲,它在在Python中使用带有列表和字符串文
在Python中使用带有列表和字符串文字的for循环,代码,数字,培训,之间,字符串,列表,语句,文字,奇数,这一点,现在看一下下面的代码,输出1到100之Python循环应该怎么写?
Python循环应该怎么写?,代码,项目,数据,名字,分析,异常,基础,培训,面临,情况,说到处理循环,我们习惯使用for,while等,比如依次打印每个列表中的