在单链表中检测循环的伪逻辑

时间:2011-10-07 10:33:40

标签: data-structures

下面给出了包含循环

的单一链接列表的示例

node_1 - > node_2 - > node_3 - > node_4 - > node_5 - > Node_3上

我想通过考虑性能因素来检测任何给定链表是否存在循环。

2 个答案:

答案 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;
          }
      }
    }