双向链表中循环的开始?

8 浏览
0 Comments

双向链表中循环的开始?

我遇到了一个问题,

在一个循环链表中,找到循环开始的节点?

例如:输入:A -> B -> C -> D -> E -> C [与之前的C相同] 输出:C

其中一个解决方法可以是,检查这些节点存储的值的地址是否相同吗?

所以类似于&(A->value)会返回给我们一个地址,然后我们找到是否有重复的地址,如果有,那就是循环的开始。

0
0 Comments

循环双向链表中循环开始的问题是什么?原因是什么?解决方法是什么?

在这段对话中,人们讨论了如何在循环双向链表中找到循环开始的问题,以及为什么要使用Floyd循环检测算法作为更好的解决方案。

首先,某些情况下了一种解决方法,即存储沿途遇到的所有节点,但这种方法在空间复杂度方面效率非常低。

然后,某些情况下了Floyd循环检测算法,这是一种更好的解决方法。该算法是通过使用两个指针,一个快指针和一个慢指针,来检测循环是否存在。这种算法已经被证明是一种高效的方法,并且在许多编程语言中都有实现。

然而,有人对此算法提出了疑问,认为它可能有些过于复杂了。然后,另一个人指出,既然已经知道链表是循环的,那么使用Floyd算法可能有些过度了。

因此,他们提出了一个问题:有什么更好的解决方法?然而,对此问题并没有给出明确的答案。

后来,有人提出了一种可能的解决方法,即找到循环的第一个元素。然而,另一个人指出,他们可能误解了问题,因为Floyd算法不仅可以找到循环是否存在,而且还可以找到循环的第一个元素。

总之,这段对话中讨论了在循环双向链表中找到循环开始的问题,以及使用Floyd循环检测算法作为更好的解决方法。虽然还有一些疑问和混淆,但最终得出的结论是Floyd算法可以解决这个问题。

0