js 检测链表是否有环

set 判重

利用节点的内存地址来进行判重

var hasCycle = function (head) {
        let set = new Set();
        let p = head;
        while (p) {
          //存在重复
          if (set.has(p)) {
            return true;
          }
          set.add(p);
          p = p.next;
        }
        return false;
      };

利用快慢指针

主要是利用的「Floyd 判圈算法」(又称龟兔赛跑算法),首先慢指针每次移动一步,快指针移动2步,如果没有环,那么慢指针永远也追不上快指针。如果有环,那么快指针一定会遇到慢指针

var hasCycle = function (head) {
        let fast = head,
          slow = head;
        // 零个结点或者一个结点,肯定无环
        if (fast.next == null || fast.next.next == null) return false;
        while (fast && fast.next) {
          //走一步
          slow = slow.next;
          //走二步
          fast = fast.next.next;
          if (slow === fast) {
            return true;
          }
        }
        return false;
      };
原文地址:https://www.cnblogs.com/heihei-haha/p/14828172.html