【发布时间】:2017-07-30 14:55:02
【问题描述】:
问题: 给定一个循环链表,实现一个算法,返回循环开始时的节点。
我不是要求回答这个问题!
我知道有一些循环检测算法涉及以不同速度移动的两个指针,并且我已经知道了这个问题的一些答案。
但是,我想知道的是,当我第一次尝试解决这个问题时,我是这样接近的:
LinkedListNode loopExists(LinkedListNode node) {
HashSet hs = new HashSet();
while(node != null) {
if(hs.contains(node))
return node;
else
hs.add(node);
node = node.next;
}
return null;
}
我很好奇,因为没有像我上面发布的那样的答案。
问题是在循环开始时询问节点。
如果我遍历链表检查每个节点(不是 node.data)并且如果我再次找到相同的节点,我假设这是循环开始处的节点。
这种方法有什么问题吗?如果我有什么误解,请告诉我。谢谢!
【问题讨论】:
-
这样的问题更多属于codereview.stackexchange.com
-
如何定义循环的开始?它可以是循环中的任何节点,除非我误解了这个问题。
-
循环没有“开始”。
-
输入:A -> B -> C -> D -> E -> C 输出:C 我的意思是循环的开始和结束(重复)
标签: java loops linked-list nodes