2016-05-15 58 views
0

在一次采访中,我被要求检测链表中的循环节点并计算循环中的节点数。由于我没有意识到flyod算法,我试图找出我自己的方法。在没有Floyds循环检测算法的情况下检测链表中的循环

这个想法是在这种情况下,两个节点的地址将指向同一个节点(循环节点)。

EG。

1 - > 2 - > 4 - > 5 - > 7 - > 3 - > 4

这里2->下和3->下是一样的,这是地址4.这意味着链表中有一个循环,4是循环节点。并且从4到4的遍历将给出循环中的节点的数量。

有没有办法让我们继续这个方法?

回答

2

当然,您可以通过维护一组已经访问的地址来轻松地找到一个循环。由于您对循环大小感兴趣,因此您可以将其制作为地图:address->count。计数是在访问相应地址处的节点时访问过多少个节点。当您发现表中已有节点时,您可以通过从当前表中减去表中的计数来获取循环大小。当然,您可以通过维护一个“访问”位并在节点本身中进行计数来获得相同的效果。那么不需要单独的地图。

+0

谢谢基因。面试官没有听我说这个。我认为他有想法的flyod算法。但是当你不知道现有的解决方案时,你试图弄明白。无论如何感谢您的确认。 –

+1

这是一个不好的面试问题,所以也许没有在那家公司工作是件好事。在面试期间,不太可能有人会当场发明Floyd算法。所以他/她真正问的是你是否碰巧在你的学习中学习Floyd算法。 (需要在真正的软件中找到周期是非常罕见的)。这并没有太多说明你将如何在工作中执行。 – Gene