1. 程式人生 > 其它 >判斷連結串列是否有環

判斷連結串列是否有環

技術標籤:劍指offer演算法題連結串列java資料結構

題目描述

判斷給定的連結串列中是否有環。如果有環則返回true,否則返回false。

示例1:

image

輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:連結串列中有一個環,其尾部連線到第二個節點。

示例2:

image

輸入:head = [1,2], pos = 0
輸出:true
解釋:連結串列中有一個環,其尾部連線到第一個節點。

示例3:

image

輸入:head = [1], pos = -1
輸出:false
解釋:連結串列中沒有環。

解決方法:

雙指標:快慢指標,快指標fast每次走兩步,慢指標slow每次走一步,如果存在環,則fast會和slow指標相遇

時間複雜度:O(n)

空間複雜度:O(1)

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        if (head == null ||
head.next == null) { return false; } ListNode slow = head; ListNode fast = head; while (slow != null && fast != null) { slow = slow.next; fast = fast.next; if (fast == null) { break; }
fast = fast.next; //快指標多走一步 if (slow == fast) { return true; } } return false; } }