1.簡述:
描述
判斷給定的連結清單中是否有環。如果有環則傳回true,否則傳回false。
資料範圍:連結清單長度 ,連結清單中任意節點的值滿足
要求:空間複雜度 ,時間複雜度
輸入分為兩部分,第一部分為連結清單,第二部分代表是否有環,然後将組成的head頭結點傳入到函數裡面。-1代表無環,其它的數字代表有環,這些參數解釋僅僅是為了友善讀者自測調試。實際在程式設計時讀入的是連結清單的頭節點。
例如輸入{3,2,0,-4},1時,對應的連結清單結構如下圖所示:
可以看出環的入口結點為從頭結點開始的第1個結點(注:頭結點為第0個結點),是以輸出true。
示例1
輸入:
{3,2,0,-4},1
複制
傳回值:
true
複制
說明:
第一部分{3,2,0,-4}代表一個連結清單,第二部分的1表示,-4到位置1(注:頭結點為位置0),即-4->2存在一個連結,組成傳入的head為一個帶環的連結清單,傳回true
示例2
輸入:
{1},-1
傳回值:
false
說明:
第一部分{1}代表一個連結清單,-1代表無環,組成傳入head為一個無環的單連結清單,傳回false
示例3
輸入:
{-1,-7,7,-4,19,6,-9,-5,-2,-5},6
true
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null || head.next == null){
return false;
}
ListNode slow = head;
ListNode fast = head.next.next;
while(fast != null && fast.next != null){
if(slow == fast){
return true;
}
slow = slow.next;
fast = fast.next.next;
}
return false;
}
}