【发布时间】:2011-12-15 19:39:35
【问题描述】:
我遇到的一个问题, 在循环链表中,找到循环开头的节点?
示例输入:A -> B -> C -> D -> E -> C [与之前相同的 C] 输出:C
其中一种解决方案是,看看存储在这些节点上的值的地址是否相同?
所以像 &(A->value) 这样的东西会返回我们的地址,然后我们会发现一个地址是否重复,如果是,那就是循环的开始?
【问题讨论】:
-
如果节点按值存储(即依赖于所包含类型的复制语义)则不起作用。还有其他方法可以解决这个问题...
-
比较节点本身似乎更容易,即
A而不是&(A->value)。 (虽然后者也可以。) -
您可以使用增量值来计算列表中的节点。遍历列表时,您可以检查值是递减(回到开头)还是递增。
-
在使用链表的常见循环队列实现中,保留两个指针指向前节点和后节点。此技术可用于查找循环链表的开头和结尾(当且仅当以这种方式设计时)。
标签: c++ c linked-list