[算法]判断一个链表是否有环

【算法】给定一个链表,判断链表中是否有环 1.概述 本文摘抄自 漫画算法:小灰的算法之旅.pdf 并且补充。 2.题目 有一个单向链表, 链表中有可能出现“环”, 就像下图这样。 那么, 如何用程序来判断该链表是否为有环链表呢? 2.1 方法1: 首先从头节点开始, 依次遍历单链表中的每一个节点。 每遍历一个新节点, 就从头检查新节点之前的所有节点, 用新节点和此节点之前所 有节点依次做比较。 如果发现新节点和之前的某个节点相同, 则说明该节点被遍历过两次, 链表有环; 如果之前的所有节点中不存在与新节点相同的节点, 就继续遍历下一个新节点, . 阅读详情

如何判断一个链表是否有环


解题思路:

定义两个指针fast和slow,其中fast是快指针,slow是慢指针,二者的初始值都指向链表头,slow每前进一步,fast每次前进两步,两个指针同时向前移动,快指针每移动一次都要和慢指针比较,直到当快指针等于慢指针为止,就证明这个链表是带环的单向链表,否则,证明这个链表是不带环的循环链表(fast先行到达尾部为NULL,则为无环链表)。

代码实现如下:

public boolean isLoop(Node head){
        Node fast = head;
        Node slow = head;
        if (fast == null) {
            return false;
        }
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
            if(fast == slow){
                return true;
            }
        }
        return !(fast == null || fast.next == null);
    }

Github源码地址:

https://github.com/GeniusVJR/Algorithm-and-Data-Structure/tree/master/判断一个链表是否有环

UE4/5编译报错MSB3073终极解决指南:从路径检查到MSVC版本降级 本文针对UE4/5开发中常见的MSB3073编译报错,提供了一套从根源到实战的终极解决指南。文章系统性地讲解了错误成因,并分层次指导排查路径字符、环境变量、MSVC版本兼容性、权限冲突等核心问题,重点介绍了通过降级MSVC编译器版本等关键操作来彻底解决此编译难题。 阅读详情

相关推荐

英特尔® NUC迷你电脑实现无人值守自动开机配置指南

本文详细介绍了如何配置英特尔® NUC迷你电脑实现无人值守自动开机功能。从BIOS设置到操作系统级配置,涵盖硬件兼容性确认、电源恢复功能设置及常见问题解决,帮助用户轻松实现设备断电后自动恢复运行,适用于家庭服务器、企业终端等多种场景。

weixin_42638178的博客 472

判断链表是否有环

判断链表是否有环的解法有很多,下面归纳几种常见算法。 判断链表是否存在环 方法一:通过双循环遍历完成,外层循环从头结点开始遍历,对于遍历到一个新节点newNode,内层循环都要从头结点遍历到该新节点的上一个节点head。如果链表无环,则newNode和head永不相等,否则就会相等。时间复杂度为O(n^2)。 public class LinkListCycle { public static class Node { private int data; pr

MAX_VALUE的博客 8406

关于42步进电机驱动——基于STM32 HAL库实现

我找了好多资料,好多关于42步进电机的都是文档,这么文档都需要积分,需要积分就算了内容还非常差,浪费时间和电脑的内存。关于大部分是基于Arduino和51去驱动的 42步进电机驱动硬件如下: 首先你要了解步进电机的驱动原理,我也不啰嗦了,请看这边博客: 二相四线,四相五线,四相六线步进电机接线及驱动方法 , 看完这篇你就知道驱动和接线的原理了。 起初我也为如何接线烦恼,因为有些博客在讲述这些问题的时候没有讲的很透彻。 方法如下: ①用万用表调到欧姆档,用其中一个表笔搭在一个引脚上,依次测其它.

Jodan132的博客 1万+

如何判断链表有环

如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现“环”,就像题图这样。如何用程序判断出这个链表是有环链表? 不允许修改链表结构。 时间复杂度O(n),空间复杂度O(1)。方法一、穷举遍历 方法一:首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点,就从头节点重新遍历新节点之前的所有节点,用新节点ID和此节点之前所有节点ID依次作比较。如果发现新节点之前的所有节点当中存在...

少年夜雨行的专栏 7283

设计一个订单管理系统(OMS)系统100问?

一个完善的订单管理系统不仅仅是简单地记录和处理订单信息,更需要考虑到订单的全生命周期管理,包括订单的创建、支付、配送、售后等环节。这100个问题围绕订单管理系统(OMS)的各个方面展开,涵盖了系统的功能、架构、安全性、异常处理、订单处理流程、支付、库存管理、客户管理、报表与分析等多个方面。通过这些问题,可以全面考虑订单管理系统在设计与实现过程中需要考虑的各种因素,从而确保系统能够满足业务需求、具有良好的性能和稳定性,同时易于扩展、维护和管理。

nbsaas-boot基于Request-Response的企业级快速开发框架 1384

SMOKE 3D:从 Python 到 C++ 实现车辆与行人单目 3D 视觉识别在 RK3588 上的深度部署

SMOKE的网络结构通常基于高性能的骨干网络(如DLA-34,您使用的模型就是基于此),通过编码器-解码器架构来提取特征。输入:RGB图像(本项目为骨干网络:用于特征提取。检测头热力图分支:预测关键点热力图。通常在热力图上进行NMS来找到局部最大值,即潜在的关键点位置。回归分支:对于每个关键点位置,预测上述的8维3D属性向量。分类分支:预测每个关键点对应的物体类别。置信度分支:预测每个关键点的置信度。本教程详细介绍了SMOKE单目3D目标检测模型在RK3588上的部署。我们从SMOKE的。

LXY_LOVE36的博客 436

如何判断链表有环(三种方法)

方法一、穷举遍历 方法一:首先从头节点开始,依次遍历单链表的每一个节点。每遍历到一个新节点,就从头节点重新遍历 新节点之前的所有节点,用新节点ID和此节点之前所有节点ID依次作比较。如果发现新节点之前的所有节 点当中存在相同节点ID,则说明该节点被遍历过两次,链表有环;如果之前的所有节点当中不存在相同的 节点,就继续遍历下一个新节点,继续重复刚才的操作。 例如这样的链表:A->B->...

WangY.H 1万+

Deepfake检测模型-PyDeepFakeDet项目复现实验报告-深度学习

该实验是对于https://github.com/wangjk666/PyDeepFakeDet模型的复现。PyDeepFakeDet 是一款集成的、可扩展的 Deepfake 检测工具。目标是提供最先进的 Deepfake 检测模型以及用于在常用 Deepfake 数据集上训练和评估新模型的接口。

一位不是很硕的鉴伪方向硕士 5494

判断一条链表是否是环形链表的两种方法

环形链表的示意图如下 我们假设定义的单链表如下 struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; 方法一:哈希表法 这里我们采用set这一关联容器。设置set的下标为ListNode*,遍历该链表的每一个结点,将未出现过的链表结点存储至set中...

CoderJiang 4593

高性能算力中心 — RDMA — Overview

目录 文章目录目录RDMA基于以太网的 RoCE/RDMA 计算优化NVMeNVMe Over Fabrics基于以太网的 NVMe 存储优化 RDMA RDMA(Remote DMA,远程直接内存访问)是一种新的内存访问技术,RDMA 让计算机可以直接存取其他计算机的内存,而不需要经过 CPU 耗时的处理。RDMA 将数据从一个系统快速移动到远程系统存储器中,而不对操作系统造成任何影响。RDMA 技术的原理及其与 TCP/IP 架构的对比如下图所示。 InfiniBand(IB):从一开始就支持 R

烟云的计算 2365

YOLOv12改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进

1️⃣ 什么!不知道如何改进模型⁉️ 本专栏所使用并改进的每一个模块均包含详细的模块分析、原理讲解、个人总结、多种改进方式以及完整的修改流程,所有改进100%可直接运行,性价比极高。2️⃣ 找不到合适的模块⁉️ 所有改进点均为近三年顶会,顶刊提出的先进算法,将其融入到中,并进行二次创新,新颖度高,创新度高,能够适应不同的任务场景。3️⃣ 不确定自己改进的步骤、结果是否正确⁉️ 订阅专栏即可进群享受模型训练、模型改进、论文写作、投稿选刊,从入门到论文的各种答疑内容,非常适合新手。4️⃣ 团队内发表数篇SCI论

Limiiiing的博客 2万+

环形链表的判断方法与原理证明

不妨推导一下:

2303_81216104的博客 1979

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

算法面试题:给定一个链表,判断链表中是否有环。

转自:作者:LeetCode 链接:链接 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], p...

Alice_qixin的博客 3410

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

每日算法:判断一个单链表是否有环

点击上方三分钟学前端,关注公众号回复交流,加入前端编程面试算法每日一题群面试官也在看的前端面试资料给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链...

我本可以容忍阳光,如果我不曾见过太阳,然而阳光已使我荒凉,成为更新的荒凉。 464

[算法]判断一个链表是否有环及环开始的位置

这是一道很常见的面试问题,,只用两个变量通过O(n)的时间复杂度就可以解决。 Floyd cycle detection算法,也叫做tortoise and hare算法,龟兔算法吧。以下内容为对解法做一归纳,参考了stackoverflow论坛的讨论问题:如何检测一个链表是否有环,如果有,那么如何确定环的起点.龟兔解法的基本思想可以用我们跑步的例子来解释,如果两个人同时出发,如果赛道有环,那么快

duxinyuhi的专栏 2710

算法题解-判断一个链表中是否有环

知识点:链表,双指针 题目来源:nc4 描述:判断给定的链表中是否有环。如果有环则返回true,否则返回false。 数据范围:链表长度 0≤n≤100000 ,链表中任意节点的值满∣val∣<=100000 要求:空间复杂度 O(1),时间复杂度 O(n) 输入分为两部分,第一部分为链表,第二部分代表是否有环,然后将组成的head头结点传入到函数里面。-1代表无环,其它的数字代表有环。 示例1 输入: {3,2,0,-4},1 返回值: true 说明: 第一部分{3,2,0,-4}代表一个链表

AKA_SUPERROSE的博客 477

算法:判断一个链表中是否有环

LeetCode OJ :Linked List Cycle

一路前行的专栏 861

python链表是否有环_python算法-013判断一个较大的链表是否有环

天上不会掉馅饼,努力奋斗才能梦想成真。先来讲讲废话,最近想法很多。今年9月份就要开始找工作了,现在的我还远远达不到我想去的岗位的要求。很多方面都差很多,昨天看文章学到个公式还挺有意思的:offer = 心态 * (实力 + 面试技巧) + 缘分运气我觉得这公式挺对的,这公式里有心态、实力、面试技巧和缘分运气一共四项因素,只有前三项是我们能控制的。就我自身而言:心态,容易紧张,但是还是比较稳的,不轻...

weixin_39880301的博客 139

算法题:给定一个链表,判断链表中是否有环。

答:这是一个检测链表中是否有环的问题,可以使用快慢指针法来解决。定义两个指针 slow 和 fast,初始都指向链表的头节点。slow 每次移动一步,fast 每次移动两步,如果存在环,则两个指针一定会相遇。

新生代码农的博客 298

每日一道Leetcode算法——如何判断一个链表是否有环,并求出环的入口和环的长度——2019.01.12

判断一个链表是否有环有两种办法: 一种最经典是定义两个指针,一个指针每次向前走一步,一个指针每次向前走两步,如果两个指针最终重合。则证明有环。 一种是创建一个hash表,将每次走过的结点放入hash表中,如果结点在hash表中,则表示存在环。 判断链表的入口: 假设两个指针第一次相遇点为m,此时令一个指针从头结点向下走,每次走一步,令另一个指针从相遇点往下走,每次走一步,两个指针相遇的位置...

third_的博客 903

算法编程5:判断一个单链表是否有环

分析:使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出 class Solution: def hasCycle(self , head ): # write code here if not head: return False node = head while node: noden =

大柳的博客 497

算法7— 判断一个单链表是否有环,如果有,找出环的起始位置

第一种方法是从单链表head开始,每遍历一个,就把那个node放在hashset里,走到下一个的时候,把该node放在hashset里查找,如果有相同的,就表示有环,如果走到单链表最后一个node,在hashset里都没有重复的node,就表示没有环。 这种方法需要O(n)的空间和时间。 第二种方法是设置两个指针指向单链表的head, 然后开始遍历,第一个指针走一步,第二个指针走两步,如果没

思考、总结、专注 957

牛客网_算法初级班_判断链表是否有环_返回两个无环的链表相交的第一个节点_返回两个有环的链表相交的第一个节点_python实现

一、判断链表是否有环 1、问题描述 给定一个链表,判断其是否有环 2、思路 两个方法: 借助哈希表 不借助hash表 3、python实现 方法一: 遍历链表得到节点 判断该节点是否是哈希表中的某一个key,若不是则加入,若是则返回即为第一个有环的节点 若遍历到最后遇到None,则不存在环 ''' 问题一:判断链表是否有环 ''' # Definition for singly-linke...

禾白小三撇同学- 310

5分钟一个算法编程小点:链表判断是否有环,并且给出环的位置

问题:链表 链表结构,判断是否有环 解决方法:快慢双指针 经典的双指针方法,一个指针每次向后移动两个节点,一个指针每次向后移动一个节点,如果链表有环,最终两个指针会碰到一起, 主要问题:有环链表,能找出环的切入口节点吗? 也是利用快慢双指针,不过技巧在于,第一次相遇后,如果从头节点再来一个慢指针,两个慢指针相遇的节点就是入口节点,有点抽象,我们来形象描述一下,如下图: 这是第一次相遇的时候,我们根据快慢指针可以得到公式: 2∗(k+m)=k+L+m2k+2m=k+L+mk=L−m \begin{align

笔记小屋 265

有苦有乐的算法 --- 可能有环也可能无环的两个单链表,判断这两个链表是否相交,如果相交返回相交的第一个节点

题目 可能有环也可能无环的两个单链表,判断这两个链表是否相交,如果相交返回相交的第一个节点。 解析 第一步,判断链表是有环链表还是无环链表; 如果一个单链表无环,它一定有一个指向null的尾结点; 如果一个单链表有环,用两个指针oneStep,twoStep,twoStep一次走两个节点,oneStep一次走一个节点,这两个指针必定会相遇; 此时将twoStep重新遍历,一次走一个节点,oneStep也继续一次走一个节点,二次相遇的时候,这个节点就是入环节点。 第二步,判断是否相交; 2-1:一个单链表有

一个对Java“一往情深”的后端程序员,对Java生态体系有着浓厚的兴趣与持续的研究。当我不在Java里“内卷”时,我也会探出头来,看看Web技术的广阔天地。希望通过这个博客,与所有同行交流切磋,共同进步。 870

数据结构与算法---线性表---判断一个链表是否有环

141. 环形链表 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。 /** * Definition for singly-linked list. * struct ListNode { * int val; * s

IOSSHAN的博客 369
上一篇: [算法]实现单链表的反转
下一篇: [算法]如何实现栈
陶程
博客等级 码龄12年 360粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值