141.列表是否有环 | 哈希表、双指针 | easy | Leetcode

这篇博客介绍了LeetCode第141题——如何判断链表中是否存在环。讲解了链表的基础知识,包括ArrayList和LinkedList的区别,以及HashSet的特性。文中提供了两种解决方案,一是利用哈希表记录节点,二是使用双指针法,快慢指针以不同速度遍历链表。详细阐述了两种方法的思路和复杂度分析。
摘要由CSDN通过智能技术生成

基础知识

Java集合主要由2大体系构成,分别是Collection体系和Map体系,其中Collection和Map分别是2大体系中的顶层接口。

Collection主要有三个子接口,分别为List(列表)、Set(集)、Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不可重复;

List中主要有ArrayList、LinkedList两个实现类;Set中则是有HashSet实现类;而Queue是在JDK1.5后才出现的新集合,主要以数组和链表两种形式存在。

Map同属于java.util包中,是集合的一部分,但与Collection是相互独立的,没有任何关系。Map中都是以key-value的形式存在,其中key必须唯一,主要有HashMap、HashTable、TreeMap三个实现类。
在这里插入图片描述
Java List详解(包括ArrayList和LinkedList的解析与操作)

1. 链表Linked-List

Leetcode题解:一文搞定常见的链表问题

  • 数组的优缺点:
    优点:可以根据偏移实现快速的随机读写。
    缺点:扩容,增删元素极慢。
  • 链表的基本知识:
    链表的指针域指向该节点的下一个节点的内存地址,因此尾节点的指针域为空。
    链表易于插入与删除,但无法高效获取长度、访问元素。
  • 单链表与双链表
    在这里插入图片描述
  • 单链表
    链表节点
  • 单链表的插入与删除原理(关于插入与删除时如何改变链表的指针域),见链接
  • 环形链表:单链表的最后一个节点指针域不为空,而是指向了链表中的另一个节点。环形链表

2.HashSet

Java中Set总结
底层由HashMap实现;
不允许出现重复因素;
允许插入Null值;
元素无序(添加顺序和遍历顺序不一致);
线程不安全,若2个线程同时操作HashSet,必须通过代码实现同步。

我的理解:可以将HashSet看作简单的集合。

  • 初始化:Set<Type> name = new HashSet<>();
  • 元素添加:hashSet.add(xxx);
  • 元素移除:hashSet.remove(xxx)
  • 元素清除:hashSet.clear();
  • 判断集合是否为空:hashSet.isEmpty() 返回boolean
  • xxx元素是否存在:hashSet.contains("hello"); 返回boolean
  • 元素数量:hashSet.size()
  • 迭代器:hashset.iterator()
    例:
    Set<String> hashset = new HashSet<>();
    hashset.add("First");
    hashset.add("Second");
    hashset.add("Th
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值