环形链表——java

给你一个链表的头节点 head ,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ,则返回 true 。 否则,返回 false 。

示例 1:

输入:head = [3,2,0,-4], pos = 1
输出:true
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0
输出:true
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

输入:head = [1], pos = -1
输出:false
解释:链表中没有环。

解题思路

看到这个题我只想着可以用链表的知识来解决,但完全不知道该怎么下手。所以去看了链表的知识

链表

链表是一种逻辑相连,但物理上不一定相连的存储结构,是由每一格节点组成,(该节点包含val,和next,其中val存放该节点的值,next是一个索引,指向下一个节点)

如何创建一个新的空链表: LinkNode head=new LinkNode(); head.next=null;  (LinkNode是一个节点)

解题一:

所以这个题应该如何使用链表来解决呐?

这里我们介绍Floyd判圈算法(龟兔赛跑算法):

假想「乌龟」和「兔子」在链表上移动,「兔子」跑得快,「乌龟」跑得慢。当「乌龟」和「兔子」从链表上的同一个节点开始移动时,如果该链表中没有环,那么「兔子」将一直处于「乌龟」的前方;如果该链表中有环,那么「兔子」会先于「乌龟」进入环,并且一直在环内移动。等到「乌龟」进入环时,由于「兔子」的速度快,它一定会在某个时刻与乌龟相遇,即套了「乌龟」若干圈。(链接:https://leetcode.cn/problems/linked-list-cycle/solutions/440042/huan-xing-lian-biao-by-leetcode-solution/  来源:力扣(LeetCode))

在该题中我们可以创建两个指针,分别是快慢指针,fast和slow,在刚开始我们设置slow指向head,fast指向head.next(即慢指针指向第一个节点,快指针指向第二个节点),fast一次移动两格,慢指针一次移动一格;所以若在后面的循环过程中,快慢指针相遇,则表明该链表存在环那么如何来判断该链表无环呐?我们在这里可以设置一个循环while(slow!=fast) 若fast指向空(即fast指向链尾),则表明该链表无环;

在这里我们来需要注意,因为在刚开始我们要去创建快慢指针,一个指向第一个节点,一个指向第二个节点,为了防止出现空指针异常的情况,我们还需要对第一个节点和第二个节点捷星判断,若为空,则直接返回false(即或此时空链表或者只有一个节点的聊表是不可能存在环的)
 

if(head==null ||head.next==null)  //判断该链表是否为空链表,或者只有一个节点的链表;这两种情况是不可能存在环的return false;LinkNode slow=head;
LinkNode fast=head.next;  //创建快慢指针while(slow!=fast)
{if(fast==null || fast.next==null)   //如果此时fast指针指向链表尾,或者fast所指节点的后一个节点是链表尾(因为fast一次移动两格),则表明该链表无环return false;slow=slow.next;fast=fast.next.next;//移动快慢指针
}return true;  //说明此时slow==fast

解题二:

看到还有另外一种解法,就是去遍历整个链表。首先创建一个容器,每遍历一个节点先看容器中是否包含该节点,若不包含则将该节点加入到容器中,继续遍历下一个节点,直到链表为空;若包含,则说明该链表存在环,返回true

那么该容器该如何选择??在这里我们选择哈希集合

哈希集合

HashSet是一个没有重复元素的集合(Set集合是不允许出现重复元素的)

初始化: HashSet<类型>  集合名 =new HashSet<>();

添加:集合名.add(元素);

删除:集合名.remove(元素);

判断是否包含某元素:集合名.countains(元素);

判断是否为空:集合名.isEmpty();

获取大小:集合名.size();

获取所有元素:

  可以使用for:: for(类型 s:集合名){}                   

  可以使用迭代器::Iterator it=集合名.iterator;    while(it.hashNext){}

 (s和it是我这里随便起的名称)

HashSet<LinkNode> hash=new HashSet<>();//创建一个哈希集合while(head!=null)
{if(hash.contains(head))  //如果哈希集合中包含了head节点return true;hash.add(head);head=head.next;
}
retrun false;  //已经遍历完该链表,没有环

想再写一点hashset和hashmap的区别::

HashMap是基于键值对(key-value pair)的存储结构,每个元素都有一个key和一个对应的value;HashSet是基于哈希表(hash table)的存储结构,只存储元素的值

HashMap中的key是唯一的,不允许重复;HashSet中的元素也是唯一的,不允许重复

HashMap通过使用key来访问value,所以可以通过key快速查找、插入和删除元素;HashSet只能通过元素的值来访问和操作集合,具有快速查找、插入和删除元素的特性。

(原文链接:HashMap与HashSet的区别_hashset hashmap区别-CSDN博客)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/829503.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Axure实现tab页面切换功能

1. 实现效果 2. 实现原理 创建两个标签&#xff0c;并实现点击时选中状态点击时&#xff0c;设置面板状态 3. 实现步骤 3.1 实现可切换的标签 在页面上拖拽两个矩形作为两个tab标签&#xff0c;并命名 tab1 和 tab2 设置每个矩形的边框显示&#xff0c;只显示下边框即可 …

C#反射应用

1.根据类名名称生成类实例 CreateInstance后面的参数部分一定要和所构造的类参数数量对应&#xff0c;即使设置参数默认值&#xff0c;也不可省略。 2.只知道类名&#xff0c;需要将该类作为参数调用泛型接口。 3.只知道类名&#xff0c;需要将该类的数组作为参数调用泛型接口…

LeetCode刷题之删除重复元素

文章目录 1.删除数组中的重复元素1.1 描述1.2 分析1.3 解答 2. 删除有序数组中的重复元素2.1 描述2.2 分析2.3 解答 1.删除数组中的重复元素 题26、删除数组中的重复元素 1.1 描述 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0…

顺序查找和折半查找

顺序查找&#xff1a; 对于无序的情况&#xff1a; 什么是顺序查找&#xff1a;顺序查找的实现方式&#xff08;存储&#xff09;&#xff0c;是含有两种的方式进行存储的&#xff0c;一种是顺序表的形式进行存储&#xff0c;还有一种是使用链表的形式进行存储的。采用顺序查…

架构师系列- 消息中间件(15)-kafka业务实战

7.1 顺序性场景 7.1.1 场景概述 假设我们要传输一批订单到另一个系统&#xff0c;那么订单对应状态的演变是有顺序性要求的。 已下单 → 已支付 → 已确认 不允许错乱&#xff01; 7.1.2 顺序级别 1&#xff09;全局有序&#xff1a; 串行化。每条经过kafka的消息必须严格…

Swift中TableView的下拉刷新和上拉加载

在Swift中&#xff0c;可以使用UIRefreshControl来实现TableView的下拉刷新。首先&#xff0c;需要在ViewDidLoad方法中创建一个UIRefreshControl的实例&#xff0c;并添加到TableView的subview中。然后&#xff0c;设置refreshControl的action为TableView的下拉刷新函数&#…

windows SDK编程 --- 消息之键盘消息(4)

前置知识 一、 键盘消息 在Windows操作系统中&#xff0c;键盘消息是用来通知应用程序有关键盘输入事件的一种机制。当用户在键盘上进行操作&#xff0c;比如按键或释放键时&#xff0c;Windows会生成相应的消息并发送给处理这些输入的应用程序。这些消息对于开发图形用户界面…

ElasticSearch教程入门到精通——第二部分(基于ELK技术栈elasticsearch 7.x+8.x新特性)

ElasticSearch教程入门到精通——第二部分&#xff08;基于ELK技术栈elasticsearch 7.x8.x新特性&#xff09; 1. JavaAPI-环境准备1.1 新建Maven工程——添加依赖1.2 HelloElasticsearch 2. 索引2.1 索引——创建2.2 索引——查询2.3 索引——删除 3. 文档3.1 文档——重构3.2…

react,Chart

一、基础图&#xff1a;https://ant-design-charts.antgroup.com/ Ant Design Charts 1. 首先要下载ant-design/charts&#xff0c;然后在页面中添加如下柱状图代码: import React from react; import { Column } from ant-design/chartsconst DemoColumn: React.FC () …

Grafana- bug- User sync failed - User already exists

Grafana security release: New versions of Grafana with a critical security fix for CVE-2023-3128 Vardan Torosyan • 22 Jun, 2023 • 4 min Today we are releasing Grafana 10.0.1, 9.5.5, 9.4.13, 9.3.16, 9.2.20, and 8.5.27. Alongside other bug fixes, these pa…

百度智能云千帆 ModelBuilder 技术实践系列:通过 SDK 快速构建并发布垂域模型

​百度智能云千帆大模型平台&#xff08;百度智能云千帆大模型平台 ModelBuilder&#xff09;作为面向企业开发者的一站式大模型开发平台&#xff0c;自上线以来受到了广大开发者、企业的关注。至今已经上线收纳了超过 70 种预置模型服务&#xff0c;用户可以快速的调用&#x…

深入理解冯诺依曼体系结构

文章目录 冯诺依曼体系结构概念冯诺依曼体系结构的优势冯诺依曼体系结构的现实体现 冯诺依曼体系结构概念 冯诺依曼体系结构也称普林斯顿结构&#xff0c;是现代计算机发展的基础。它的主要特点是“程序存储&#xff0c;共享数据&#xff0c;顺序执行”&#xff0c;即程序指令和…

代码随想录算法训练营Day10 | 232.用栈实现队列、225. 用队列实现栈

232.用栈实现队列 题目&#xff1a;请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 MyQueue 类&#xff1a; void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除…

【leetcode面试经典150题】75. 二叉树展开为链表(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

修改Docker容器内文件的三种方式

说明&#xff1a;本文介绍修改Docker容器内文件的三种方式 方式一&#xff1a;直接修改 敲下面的命令&#xff0c;进入Docker容器&#xff0c;如mysql docker exec -it mysql /bin/bash修改mysql的配置文件&#xff0c;/etc/my.cnf vim /etc/my.cnf如下&#xff0c;如果vim…

基于单片机的煤气泄漏报警系统设计

摘要:本文设计了一种基于单片机控制的煤气泄漏检测报警系统,该系统以AT89S52单片机为核心,通过气敏电阻传感器MQ-7将采样到的 一氧化碳气体转换为电信号经处理后送给单片机,单片机对获取的信号进行分析,控制声光报警系统进行声光报警。该系统可以对室内空 气中的CO含量是否…

【Hadoop】-Apache Hive使用语法与概念原理[15]

一、数据库操作 创建数据库 create database if not exists myhive; 使用数据库 use myhive; 查看数据库详细信息 desc database myhive; 数据库本质上就是在HDFS之上的文件夹。 默认数据库的存放路径是HDFS的&#xff1a;/user/hive/warehouse内 创建数据库并指定hdfs…

attempt to compare nil with number -- 黑马点评出现问题

问题情况 : 主要问题 : 调用lua执行redis时&#xff0c;有一个值会接受nil&#xff08;因为redis中没有该数据&#xff09;或者数值&#xff0c;当该值为nil时执行报错&#xff0c;因为会用到将该值与其他数字比较&#xff0c;故报错attempt to compare nil with number 当然…

生成完美口型同步的 AI 代言人视频(及其实现原理详解)

目录 什么是Heygen? Heygen注册 Video Translation&#xff08;视频翻译 完美口型同步&#xff09; 实现原理详解 视频翻译部分 完美口型同步部分 什么是Heygen? Heygen是一款在线工具&#xff0c;可帮助您生成具有完美口型同步的 AI 代言人视频。 Heygen注册 https:…

关于springboot内置tomcat最大请求数配置的一些问题

前言 springboot内置了tomcat。那么一个springboot web应用&#xff0c;最大的请求链接数是多少呢&#xff1f;很早以前就知道这个是有个配置&#xff0c;需要的时候&#xff0c;百度一下即可。但&#xff0c;事实并非如此&#xff0c;有几个问题我想大多数人还真不知道。比如…