如何找到一个大小未知的循环链表的最后一个节点,且最后一个节点指向除了链表的第一个节点以外的任何其他节点?
如何找到一个大小未知的循环链表的最后一个节点,且最后一个节点指向除了链表的第一个节点以外的任何其他节点?
根据定义,如果一个节点不指向循环链表的第一个节点,它就不是最后一个节点。
你能在这里详细说明一下吗?
一个奇怪的列表...为什么需要这样的东西?但是不管怎样...
你可以简单地遍历所有节点,当下一个节点是你已经访问过的节点时停止。当前节点就是你的答案。
你需要一些方法来跟踪哪些节点已经被访问。向每个节点添加一个布尔标记,或使用某种具有快速插入和查找功能的集合数据类型(例如哈希集)。
Floyd循环算法无法返回列表的最后一个元素,它只能告诉我们是否存在循环。
最后一个元素的定义是,在从第一个元素开始顺序扫描列表时,它之前和最后一个元素之前的所有元素都没有被看到过(指针值)。在最后一个元素之后的第一个元素将是在此顺序扫描中已经被看到的第一个元素。
一种简单的解决方案是标记已访问的元素,这样就可以轻松检测到已经看到的元素。标记可以是侵入式的,即通过更改元素中的位,也可以是外部的,通过使用哈希表来存储指针值。
由于我们需要能够测试元素是否已经被访问过,我认为没有其他解决方案。
我可以详细讲解如何使用 Floyd 算法来解决这个问题,但我不理解其中一个步骤的解释。
我不完全理解为什么步骤 4 是正确的,但我有一个朋友向我解释了这个解决方案。