首页 > Web开发 > 详细

js 检测链表是否有环

时间:2021-05-30 20:09:38      阅读:17      评论:0      收藏:0      [点我收藏+]

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

js 检测链表是否有环

原文:https://www.cnblogs.com/heihei-haha/p/14828172.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!