码迷,mamicode.com
首页 > Web开发 > 详细

js 检测链表是否有环

时间:2021-06-02 17:29:00      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:head   new   cycle   节点   pre   链表是否有环   amp   ext   重复   

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 检测链表是否有环

标签:head   new   cycle   节点   pre   链表是否有环   amp   ext   重复   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!