判断是否有环形链表

news2025/2/25 13:22:20

问题描述:

给定一个链表,判断链表中是否有环。

如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。

注意:pos不作为参数进行传递,仅仅是为了标识链表的实际情况。

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

解题思路: 

本题我们可以使用快慢指针的方法进行求解,慢指针一次走一步,快指针一次走两步,根据题目描述,如果一个链表中存在环,当慢指针入环时,快指针就开始追逐慢指针,循环遍历,快指针总会追上慢指针,如果链表中没有环则fast就会为空或者fast的next为空。根据这个条件来写·接口函数。

 

bool hasCycle(struct ListNode* head)
{
	struct ListNode* slow = head, * fast = head;
	while (fast && fast->next)
	{
		slow = slow->next;
		fast = fast->next->next;
		if (slow == fast)
			return true;
	}
	return false;
}

问题思考: 

这里我想大家可能会思考这样一个问题,如果fast一次走三步或者四步以此类推,fast还会恰好等于slow吗?

首先我们先看看fast一次走两步时,为什么fast一定可以等于slow,我们假设当slow进环时,slow与fast相差N个节点,那么fast走两步,slow走一步之后二者就会相差N-1步,快慢指针每走其该走的步数之后,二者的节点数量都会减一,直至二者节点减为0,fast等于slow,追上slow.

接着我们看快指针如果一次走三步的情况,还是假设假设当slow进环时,slow与fast相差N个节点,fast走三步,slow走一步,他们之间就会相差N-2个节点,每循环一次,二者之间的距离就会减少2次,故若N为偶数,则fast恰好就能追上slow,若N为奇数,最终fast会错过slow一步,如下图,此时就开始了第二轮追逐,此时fast与slow之间的距离为C-1(C为环的长度),同理,若C-1为偶数,则fast刻意恰好追上slow,但当C-1为奇数时,就永远不会追上,因为 C-1为奇数时,意味着fast又会错过slow一个节点,此时的距离又是C-1,会一直死循环下去,fast与slow永远不会相等。

fast一次走四步分析与之同理。

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

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

相关文章

抖音视频如何无水印保存?抖音视频无水印保存教程

抖音视频如何无水印保存?当下短视频盛行时代,抖音作为当下主流短视频平台之一,每天都有数以亿计的用户在抖音上分享自己的创作,然后当我们遇到感兴趣的视频,下载保存后会发现带有水印,那么抖音视频如何无水…

scrapy介绍,并创建第一个项目

一、scrapy简介 scrapy的概念 Scrapy是一个Python编写的开源网络爬虫框架。它是一个被设计用于爬取网络数据、提取结构性数据的框架。 Scrapy 使用了Twisted异步网络框架,可以加快我们的下载速度。 Scrapy文档地址:http://scrapy-chs.readthedocs.io/z…

LangChain 17 LangSmith调试、测试、评估和监视基于任何LLM框架构建的链和智能代理

LangChain系列文章 LangChain 实现给动物取名字,LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字LangChain 3使用Agent访问Wikipedia和llm-math计算狗的平均年龄LangChain 4用向量数据库Faiss存储,读取YouTube的视频文本搜索I…

kubernetes中YAML介绍;API资源对象Pod;Pod原理和生命周期;Pod资源限制

YAML介绍;API资源对象Pod;Pod原理和生命周期;Pod资源限制 1)认识YAML 官网(https://yaml.org/) YAML 语言创建于 2001 年,比 XML 晚了三年。YAML虽然在名字上模仿了XML,但实质上与…

剑指 Offer(第2版)面试题 14:剪绳子

剑指 Offer(第2版)面试题 14:剪绳子 剑指 Offer(第2版)面试题 14:剪绳子解法1:动态规划解法2:数学 剑指 Offer(第2版)面试题 14:剪绳子 题目来源…

隐形内嵌!触想智能发布全新B款内嵌式工控一体机及内嵌式工业显示器

近日,触想智能发布全新B款内嵌式工控系列TPC-19.该系列可支持显示器和一体机等多种品类、多级配置的灵活选购。标志性的2.5mm矮阶窄边面板设计,适配隐形内嵌式安装,专为机柜类设备应用打造,以高契合的物理结构,带动稳定…

Mybatis 操作续集2(结合上文)

Mybatis 是一个持久层框架,用于简化数据库的操作,和Spring 没有任何关系,我们现在能使用它是因为 Spring Boot 把Mybatis 的依赖给引入进来了,在 pom.xml 里面 Mybatis 如何进行重命名? 看最后两行代码,这样就能重命名了 package com.example.mybatisdemo.mapper;import com…

Leetcode144. 二叉树的前序遍历-C语言

文章目录 题目介绍题目分析解题思路1.创建一个数组来储存二叉树节点的值2.根据二叉树的大小来开辟数组的大小3.边前序遍历边向创建的数组中存入二叉树节点的值 完整代码 题目介绍 题目分析 题目要求我们输出二叉树按前序遍历排列的每个节点的值。 解题思路 1.创建一个数组来…

详解SpringAop开发过程中的坑

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

在 ArcGIS 软件中添加左斜宋体(东体)的方法与步骤

河流水系在作图时一般设置为左斜宋体(东体)、蓝色,比如黄河、青海湖等,如下图所示: 标准地图水系注记 下面讲解如何在 ArcGIS 软件中添加左斜宋体(东体),首先需要下载左斜宋体&#…

使用 OpenFunction 在任何基础设施上运行 Serverless 工作负载

作者: 霍秉杰:KubeSphere 可观测性、边缘计算和 Serverless 团队负责人,Fluent Operator 和 OpenFunction 项目的创始人,还是多个可观测性开源项目包括 Kube-Events、Notification Manager 等的作者,热爱云原生技术&am…

STM32F407-14.3.8-01强制输出模式

强制输出模式 在输出模式(TIMx_CCMRx 寄存器中的 CCxS② 位 00)下,可直接由软件将每个输出比较信号(OCxREF④ 和 OCx⑥/OCxN⑦)强制设置为有效电平或无效电平,而无需考虑输出比较寄存器和计数器之间的任何…

springboot 整合 Spring Security 上篇

1.创建springBoot 项目工程(spring6.0的底层、JDK17) 1.添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>配置完成启动访问controller会出现登录…

JS 实现一键复制文本内容

1、演示&#xff1a; 2、代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>一键复制</title&g…

如何用Java实现扑克牌(附源码)

目录 一.扑克牌的数据结构 二.买牌(扑克牌的初始化) 三.洗牌 四.发牌 五.完整代码 Card.java CardList.java 六.测试 输出结果 一.扑克牌的数据结构 首先&#xff0c;扑克牌是一幅一幅的&#xff0c;除去大小王以外一共有52张&#xff0c;我们可以考虑用数组来存储…

常用装备生产ERP有哪几种?有哪些作用

装备生产业务涉及原材料采购、车间排产、班组生产评估、派工单、接单报价、委外发料、库存盘点、设备台账、图纸设计等诸多环节&#xff0c;而各环节数据的共享问题普遍存在于装备生产企业内部&#xff0c;同时也直接影响企业的生产效率和整体效益等。 企业外部环境的变化和行…

linux安装KingbaseES(人大金仓数据库)

KingbaseES V8 数据库简介 金仓数据库管理系统[简称:KingbaseES]是北京人大金仓信息技术股份有限公司[简称人大金仓]的核心产品&#xff0c;具有大型通用、"三高"&#xff08;高可靠、高性能、高安全&#xff09;、"三易"&#xff08;易管理、易使用、易扩…

记录华为云服务器(Linux 可视化 宝塔面板)-- 防火墙篇

文章目录 前言安装防火墙防火墙设置防火墙操作1.设置开机启动防火墙2.查看防火墙开放哪些端口3.重载防火墙配置&#xff08;修改配置后重新启动才生效&#xff09;4.查看防火墙状态5.开启防火墙6.关闭防火墙 若遇到无法开启查询已开放的端口查询端口是否开放&#xff08;80&…

springBoot整合task

springBoot整合task 文章目录 springBoot整合task开开关设置任务&#xff0c;并设置执行周期定时任务的相关配置 开开关 设置任务&#xff0c;并设置执行周期 Component public class MyBean {Scheduled(cron "0/1 * * * * ?")public void print(){System.out.prin…

TCP连接为什么是三次握手,而不是两次和四次

答案 阻止重复的历史连接同步初始序列号避免资源浪费 原因 阻止重复的历史连接&#xff08;首要原因&#xff09; 考虑这样一种情况&#xff1a; 客户端现在要给服务端建立连接&#xff0c;向服务端发送了一个SYN报文段&#xff08;第一次握手&#xff09;&#xff0c;以表示请…