力扣-9.25-141

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法一:

public class Solution {
    
    
    public boolean hasCycle(ListNode head) {
    
    
        if(head==null || head.next==null){
    
    
            return false;
        }
        ListNode slow=head;
        ListNode fast=head.next;
        while(slow!=fast){
    
    
            if(fast==null || fast.next==null){
    
    
                return false;
            }
            slow=slow.next;
            fast=fast.next.next;
        }
        return true;
    }
}

方法二:

public class Solution {
    
    
    public boolean hasCycle(ListNode head) {
    
    
        Set<ListNode> nodesSeen=new HashSet<>();
        while(head!=null){
    
    
            if(nodesSeen.contains(head)){
    
    
                return true;
            }else{
    
    
                nodesSeen.add(head);
            }
            head=head.next;
        }
        return false;
    }
}

注意:

  1. 当需要标记时,要学会使用HashSet
  2. HashSet的contains()方法
  3. 向HashSet中添加数据的add方法

补充HashSet知识:
HashSet是set接口的实现类:HashSet类是Set接口的典型实现类不能保证元素的排列顺序,顺序可能与添加顺序不同,顺序也有可能发生变,它们的hashCode()方法返回值不相等, HashSet将会把它们存储在不同的位置, 依然可以添加成功。
HashSet不是同步的。

方法摘要:

  1. add(E e):如果此 set 中尚未包含指定元素,则添加指定元素。
  2. clear(): 从此 set 中移除所有元素。
  3. clone():返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。
  4. contains(Object o): 如果此 set 包含指定元素,则返回 true。
  5. isEmpty():如果此 set 不包含任何元素,则返回 true。
  6. Iterator iterator():返回对此 set 中元素进行迭代的迭代器。
  7. remove(Object o):如果指定元素存在于此 set 中,则将其移除。
  8. size():返回此 set 中的元素的数量(set 的容量)。
package com.xt.set;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class FunctionTest {
    
    

    public static void main(String[] args) {
    
    
        Set<String> names = new HashSet<>();//jdk7.0后实例化时<>中可以不加
        //HashSet变量.add("嗷嗷"):把嗷嗷加入到集合中
        names.add("张三");
        names.add("李四");
        
        //遍历方法不能用传统遍历方法,因为HashSet类中没有get方法
        //第一种遍历方法:加强for循环
        for (String name : names) {
    
    
            System.out.println(name);
        }
        
        //第二种遍历方法:迭代器遍历
        Iterator<String> iterator = names.iterator();
        while(iterator.hasNext()) {
    
    
            System.out.println(iterator.next());
        }
        //HashSet变量.clear():清除所有的数据
        names.clear();
        //HashSet变量.idEmpty(): 判断是否为空
        System.out.println(names.isEmpty());
        
        
    }
}

猜你喜欢

转载自blog.csdn.net/Desperate_gh/article/details/108794831