力扣简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; }
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号