力扣简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;
    }

 

posted @ 2022-05-26 16:10  Ssshiny  阅读(22)  评论(0)    收藏  举报