如何查找圆形链表的最后一个节点,其大小我不知道,最后一个节点指向链表的第一个节点以外的任何其他节点?
答案 0 :(得分:4)
可用于此的一种算法是Floyd cycle algorithm.
另请参阅this question.
答案 1 :(得分:3)
根据定义,如果节点未指向循环链表的第一个节点,则为 它不是最后一个节点。
你能在这里详细说明吗?
答案 2 :(得分:2)
一个奇怪的清单......为什么你会需要这样的东西?但无论如何......
您可以简单地遍历所有节点,并在下一个节点成为您已访问过的节点时立即停止。然后,当前节点就是您的答案。
您需要一些方法来跟踪已访问的节点。为每个节点添加一个布尔标志,或者使用某种具有快速插入和查找的设置数据类型(例如哈希集)。
答案 3 :(得分:0)
也许可以在列表的节点中添加参数,告诉您是否结束了?我想,这不会有问题。
否则,您可以记住已经访问过的节点。当已访问下一个节点时,您就在最后。
答案 4 :(得分:0)
Floyd循环算法不会给出列表的最后一个元素。它只会告诉你是否有一个循环。
最后一个的定义是,在从第一个开始的顺序扫描中遍历列表时,之前的所有元素和最后一个元素之前都没有被看到(指针值)。最后一个将是在此顺序扫描中已经看到的第一个元素。
一个简单的解决方案是标记访问过的元素,以便轻松检测到已经看到过的元素。该标志可以是侵入性的,即通过改变元素中的位,或者通过使用散列表来存储指针值。
由于我们需要能够测试元素是否已被访问过,所以我没有看到另一种解决方案。
答案 5 :(得分:0)
我可以详细说明如何使用Floyd的算法来解决这个问题,但我不明白一步的解释
我不完全理解为什么第4步是真的,但我有一位朋友向我解释解决方案。