前言:
作者:神的孩子在歌唱
大家好,我叫運智

題目:給定一個鏈表,判斷鏈表中是否有環,
-
如果鏈表中有某個節點,可以通過連續跟蹤 next 指標再次到達,則鏈表中存在環, 為了表示給定鏈表中的環,我們使用整數
pos來表示鏈表尾連接到鏈表中的位置(索引從 0 開始), 如果 pos 是 -1,則在該鏈表中沒有環,注意:pos不作為引數進行傳遞,僅僅是為了標識鏈表的實際情況, -
如果鏈表中存在環,則回傳 true , 否則,回傳 false ,
-
進階:你能用 O(1)(即,常量)記憶體解決此問題嗎?
示例 1:

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

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

輸入:head = [1], pos = -1
輸出:false
解釋:鏈表中沒有環,
提示:
鏈表中節點的數目范圍是 [0, 104]
-105 <= Node.val <= 105
pos 為 -1 或者鏈表中的一個 有效索引 ,
代碼
package 鏈表;
/*
* https://leetcode-cn.com/problems/linked-list-cycle/
* 給定一個鏈表,判斷鏈表中是否有環,如果鏈表中存在環,則回傳 true , 否則,回傳 false ,
* 快慢指標思想,比如慢指標會走一步,快指標會走兩步
* 復雜度:首先看資料規模,大概是o(n)
*/
public class _141_環形鏈表 {
public boolean hasCycle(ListNode head) {
if(head==null || head.next==null) {
return false;
}
// 慢指標
ListNode show=head;
// 快指標
ListNode fast=head.next;
// 如何終止while回圈?如果不是環形說明fast最后為null
while (fast!=null && fast.next!=null) {
show=show.next;
// 快指標走兩步
fast=fast.next.next;
// 如果快慢指標相等就說明是環形
if (show==fast) return true;
}
return false;
}
}
本人csdn博客:https://blog.csdn.net/weixin_46654114
轉載說明:跟我說明,務必注明來源,附帶本人博客連接,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/291478.html
標籤:其他
上一篇:單鏈表的實作
