【问题标题】:Linked list loop detection algorithm链表循环检测算法
【发布时间】:2011-11-15 22:56:33
【问题描述】:

我在网上阅读了一些面试问题,关于如何找到链表中的循环,解决方案 (Floyd's cycle-finding algorithm) 是有两个指针,一个比另一个快 2 倍,然后检查它们是否再次相遇.

我的问题是:为什么我不能只固定一个指针,每次只将另一个指针向前移动 1 步?

【问题讨论】:

标签: algorithm linked-list floyd-cycle-finding


【解决方案1】:

因为循环可能不包含第一个指针指向的元素。

例如,如果第一个指针指向元素 1,而链表在 (1->2->3->4->2) 之后有一个循环,则您的算法将无法检测到它。

【讨论】:

  • 刚刚删除了一些小错别字,所以我可以在一周内给你 50+ 良心(因为你只是错过了几秒钟的时间)。
  • @DaveBall 哇。谢谢。我很高兴你注意到了。 ;)
【解决方案2】:

因为可能不是完整的linkedList 在循环中。

对于链表套索检测算法,需要两个指针:

只要第一个指针指向牛仔所在的位置,就不会检测到循环。但如果你一步步向前移动,它最终会进入循环。


顺便说一句,套索是图论的终点技术,牛仔不是。

【讨论】:

    【解决方案3】:

    因为第一个(不动的)指针可能不在循环内,所以指针永远不会相遇。 (请记住,循环可能只包含列表的一部分。)

    【讨论】:

    • 这样就搞定了。谢谢大家,因为我只能标记一个正确的答案,所以我会标记最早的一个。
    猜你喜欢
    • 2012-06-18
    • 2016-09-11
    • 1970-01-01
    • 2016-01-10
    • 2011-09-17
    • 1970-01-01
    • 2011-03-10
    • 2021-01-18
    • 2011-12-04
    相关资源
    最近更新 更多