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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM