1. 程式人生 > >leetCode——141. 環形連結串列

leetCode——141. 環形連結串列

題目

給定一個連結串列,判斷連結串列中是否有環。

進階: 你能否不使用額外空間解決此題?

 解題思路

  1. 建立兩個指標,一個跑的快,一個跑的慢。
  2. 當跑的快的和跑的慢的到一個位置說明成環, 否則不成環。 

程式碼實現 

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) { 
        // 建立兩個指標 一個跑的快 一個跑的慢 當跑的快的和跑的慢的到一個位置 說明成環 否則不成環
        ListNode quick = head; // 快指標
        ListNode slow = head;  // 慢指標, 兩指標同一起點
        
        // 迴圈結束條件,任意一指標指向null
        while (quick != null && quick.next != null) {
            quick = quick.next.next;
            slow = slow.next;
            
            if (quick == slow) {
                return true;
            }
        }
        
        // 快的沒有追過慢的一圈則不成環,返回false
        return false;
    }
}