【发布时间】:2011-03-10 05:45:15
【问题描述】:
我最近在一次工作面试中被要求开发一种算法,可以确定链表是否是循环的。由于它是一个链表,我们不知道它的大小。这是一个双向链表,每个节点都有“下一个”和“上一个”指针。一个节点可以连接到任何其他节点,也可以连接到自身。
我当时想出的唯一解决方案就是选择一个节点,并与链表的所有节点进行检查。面试官显然不喜欢这个想法,因为它不是最佳解决方案。有什么更好的方法?
【问题讨论】:
-
你原来的解决方案不是一个解决方案,因为如果你在圆外拾取一个节点,你的解决方案将无限循环。它远非“最佳”。通常在面试中,一个糟糕的解决方案也是可以接受的,如果它是一个解决方案。
-
您是要检查整个列表是否是循环的,还是列表中是否存在某个循环?
-
我讨厌这样的面试问题。如果有人知道答案,那么它告诉你的只是他们知道答案。如果他们不知道“正确”的答案,他们应该如何找出答案?盲目的运气?呸。我听说过这个问题被问到“如何找到链表的中间节点?”,它与面试问题具有相同的解决方案和相同的问题。我认为这些被称为“啊哈!”关于 SO 播客过去几集的问题。
-
我会说这是 SO 3001695 的副本,除了它可能与其他三个副本一样被关闭:SO 2338683 和 SO 494830 和 SO 34249。由于 SO 34249 是最早的,它“获胜”...
标签: c++ c linked-list data-structures