給定一個鏈表,判斷鏈表中是否有環。
示例:
輸入:head = [3,2,0,-4]
輸出:true
解釋:鏈表中有一個環,其尾部連接到第二個節點。
思路:
設定一個fast一次走兩步,slow一次走一步,當fast=slow時,此時證明單鏈表中有環。
小思考:
本題給出的思路是fast是slow的二倍,那麼請思考一下,fast可不可以是slow的三倍?四倍?甚至更多倍呢?
答案肯定是可以的呢,只不過是運算時間的不同而已。但是事實證明,當fast是slow的二倍的時候走的是最少的,即運算時間是最短的。
代碼如下:
public class Solution {
public boolean hasCycle(ListNode head) {
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast .next != null) {
fast = fast.next.next;
slow = slow.next;
if(slow == fast) {
break;
}
}
if(fast == null || fast.next == null) {
return false;
}
return true;
}
}