下面给出了包含循环
的单一链接列表的示例node_1 - > node_2 - > node_3 - > node_4 - > node_5 - > Node_3上
我想通过考虑性能因素来检测任何给定链表是否存在循环。
答案 0 :(得分:1)
初始化哈希。 迭代列表。 对于每个节点,如果它已经在哈希中,则返回LOOP。 否则,将其添加到哈希。 到达列表末尾时,返回NO_LOOP。
注意:您不必将整个节点放在哈希中。标识符就足够了,或者是唯一标识节点的其他内容。
答案 1 :(得分:0)
function boolean hasLoop(Node startNode){
Node slowNode = Node fastNode = startNode;
while(true){
if(slowNode)
return false;
else if(((slowNode==fastNode)&&fastNode!=startNode)||fastNode->next==slowNode)
return true;
else{
slowNode=slowNode->next;
fastNode=fastNode->next->next;
}
}
}