【发布时间】:2011-12-02 22:02:09
【问题描述】:
下面给出一个包含循环的单链表示例
node_1 --> node_2 --> node_3 --> node_4 --> node_5 --> node_3
我想通过考虑性能因素来检测任何给定链表是否存在循环。
【问题讨论】:
标签: data-structures
下面给出一个包含循环的单链表示例
node_1 --> node_2 --> node_3 --> node_4 --> node_5 --> node_3
我想通过考虑性能因素来检测任何给定链表是否存在循环。
【问题讨论】:
标签: data-structures
初始化一个哈希。 遍历列表。 对于每个节点,如果它已经在哈希中,则返回 LOOP。 否则,将其添加到哈希中。 当到达列表末尾时,返回 NO_LOOP。
注意:您不必将整个节点放入散列中。一个标识符就足够了,或者任何其他唯一标识节点的东西。
【讨论】:
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;
}
}
}
【讨论】: