删除单链表中的循环[重复]

Posted

技术标签:

【中文标题】删除单链表中的循环[重复]【英文标题】:Deleting a loop in singly linked list [duplicate] 【发布时间】:2010-12-20 05:41:06 【问题描述】:

单链表 (SLL) 中可能出现循环。 要删除列表中的循环,首先我们需要检测SLL中的循环,然后删除循环。

谁能告诉如何用伪代码删除 SLL 中的循环? 我们可以使用 3 个指针吗? 有没有替代品来完成这项任务?

【问题讨论】:

也看到这个问题:***.com/questions/34249/… Algorithms for finding a loop in a SSL A solution for loop deletion 【参考方案1】:

您的问题有很多解决方案。最简单但效率低下的方法之一是反转列表,同时记住头节点。如果你回到头节点,那么你就知道存在一个循环。

另一种检查方法是为列表中的每个节点创建一个包含一个 int 的数组,每次访问一个节点时,递增其在数组中的对应值。然后您所要做的就是检查数组中的值是否超过一个,然后将其与额外迭代的开始位置进行比较。此方法检测完整循环和小循环。希望这会有所帮助。

【讨论】:

以上是关于删除单链表中的循环[重复]的主要内容,如果未能解决你的问题,请参考以下文章

线性表练习之Example039-删除循环单链表中的所有最小值节点直至链表为空

13.删除单链表中重复的元素

循环单链表 | 循环删除表中所有最小值并输出

删除有序链表中的重复结点

C语言 单链表

单链表--删除链表中的指定结点