天天看點

#yyds幹貨盤點# 面試必刷TOP101:判斷連結清單中是否有環

1.簡述:

描述

判斷給定的連結清單中是否有環。如果有環則傳回true,否則傳回false。

資料範圍:連結清單長度 ,連結清單中任意節點的值滿足 

要求:空間複雜度 ,時間複雜度 

輸入分為兩部分,第一部分為連結清單,第二部分代表是否有環,然後将組成的head頭結點傳入到函數裡面。-1代表無環,其它的數字代表有環,這些參數解釋僅僅是為了友善讀者自測調試。實際在程式設計時讀入的是連結清單的頭節點。

例如輸入{3,2,0,-4},1時,對應的連結清單結構如下圖所示:

#yyds幹貨盤點# 面試必刷TOP101:判斷連結清單中是否有環

可以看出環的入口結點為從頭結點開始的第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;
    }
}      

繼續閱讀