1. 程式人生 > 其它 >力扣簡141 環形連結串列 *

力扣簡141 環形連結串列 *

連結串列 集合set 龜兔賽跑

直接看的題解

//自己本來想了兩個思路,都不對!然後就去看了題解!
//一是建立一個一模一樣的連結串列,分別訪問,對於其中一個訪問過後刪掉,另一個正常訪問,若有一個時刻刪掉的訪問為空,而不刪的訪問不為空表示有環
//二是構建一個新的連結串列節點類,對每個節點都設定以一個flag標誌位,訪問過設為true,但是不會實現,因為構建新的連結串列就有可能在環裡面無限迴圈。

題解一:

package leetcode01;

import java.util.HashSet;
import java.util.Set;
//自己本來想了兩個思路,都不對!然後就去看了題解!
//一是建立一個一模一樣的連結串列,分別訪問,對於其中一個訪問過後刪掉,另一個正常訪問,若有一個時刻刪掉的訪問為空,而不刪的訪問不為空表示有環
//二是構建一個新的連結串列節點類,對每個節點都設定以一個flag標誌位,訪問過設為true,但是不會實現,因為構建新的連結串列就有可能在環裡面無限迴圈。 /** * Definition for singly-linked list. * class ListNode { * int val; * ListNode next; * ListNode(int x) { * val = x; * next = null; * } * } */ public class Solution141 { //題解一:使用set,利用它裡面不會有兩個相同的元素的特性。
public static boolean hasCycle(ListNode head) { Set<ListNode> hashSet=new HashSet<ListNode>(); while(head!=null) { if (!hashSet.add(head)) {//hashSet.add(e) 將指定元素加到set裡,如果set中沒有這個元素,且返回true。 return true; } head
= head.next; } return false; } public static void main(String[] args) { // TODO Auto-generated method stub } }

題解二:龜兔賽跑

public static boolean hasCycle(ListNode head) {
        if(head==null||head.next==null) {
            return false;
        }
        ListNode temp0=head;//
        ListNode temp1=head.next;//
        while(temp0!=temp1) {
            if(temp1==null||temp1.next==null) {
                return false;
            }
            temp0=temp0.next;
            temp1=temp1.next.next;
        }
        return true;
    }