1. 程式人生 > 實用技巧 >判斷一個連結串列中是否有環

判斷一個連結串列中是否有環

題目描述

判斷一個連結串列中是否有環

思路:

  • 首先判斷頭結點是否為空
    • 若是,代表連結串列不存在,返回false
    • 若不是,繼續下一步判斷
  • 定義一個快指標(走兩步)
  • 定義一個慢指標(走1步)
  • 一開始都是指向頭結點的
  • 迴圈條件(快指標不為空,快指標的下一個不為空)
    • 快指標不為空 契合偶數結點個數
    • 快指標的下一個不為空 契合奇數結點個數
  • 如果快指標追上慢指標,代表有環,同時指向同一個結點

圖片

程式碼實現

public class Solution {
    public boolean hasCycle(ListNode head) {
       if(head == null) return false;//如果頭結點為空,就不存在這個連結串列
        
        ListNode fast = head;
        ListNode slow = head;
        
        while(fast != null && fast.next!= null){
            fast = fast.next.next;
            slow = slow.next;
            if(fast == slow){
                return true;
            }
           
           
        }
        return false;
    }
}