Leetcode141 環形鏈表[Easy] -JAVA

題目傳送門

Leetcode141 環形鏈表[Easy] -JAVA

題目

給定一個鏈表,判斷鏈表中是否有環。

爲了表示給定鏈表中的環,我們使用整數 pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環。

示例 1:

輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:鏈表中有一個環,其尾部連接到第二個節點。

思路

判斷鏈接是否有環,使用Floyd判圈算法。使用雙指針,一慢一快,慢的每次走一步,快的每次走兩步,當有環時他們兩一定會相遇。(想象下在一個環形跑道上,一快一慢,快的後面一定會追上來相遇)。
感興趣的同學們可以瞭解下證明哦!

解法

public class Solution {
    public boolean hasCycle(ListNode head) {
        if(head==null || head.next==null) return false;
        ListNode slow = head;
        ListNode fast = head.next;
        while(slow!=fast) {
          // 只要fast和fast.next 不爲空,就還能繼續判斷下去。slow 肯定也不爲空,因爲fast他跑在前面吖
            if(fast == null || fast.next==null) 
            	return false; 
           	slow = slow.next;// 走一步
           	fast = fast.next.next; // 走兩步
        }
        return true;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章