力扣簡141 環形連結串列 *
阿新 • • 發佈:2022-05-26
連結串列 集合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; }