題目
給定一個鏈表,判斷鏈表中是否有環。
爲了表示給定鏈表中的環,我們使用整數 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;
}
}