leetcode OJ 判断单链表中是否有环

【单链表】OJ题 利用一前一后双指针,后一个结点指向前一个结点,而后两个结点都各自变成下一个结点。遍历完链表后,原链表的尾结点就会变成新链表的头结点。用两个指针一起遍历链表。一个一次走一步,另一个一次走两步。那么当走两步的指针到达链表的末尾时,走一步的指针必然位于中间。可以创建哨兵结点遍历链表,如果发现结点指向的下一个结点数据等于目标数据,则可以跳过下个结点直接指向下下个结点。先遍历链表,统计链表中结点的总数count,再减去k,输出(第count-k)个结点数据。需要注意当k比count大时,输出空链表。...... 阅读详情

题目:判断单链表中是否存在环

Binary Tree Preorder Traversal

 


单链表的结构体为:

struct NodeList
{
    int val;
    NodeList *next;
    NodeList(int x) : val(x),next(NULL){}
};

思路很简单,就是搞两个指针,初始值均指向链表头,但是一个跑的快,一个跑的慢。如果链表中没有环,两个指针不会相遇,如果有环的话,则一定会相遇(慢的被套圈了)。

这里我们定下快指针一次走两步,慢指针一次走一步。由于快指针每次追慢指针一格,快慢指针间最大距离<环长(快指针刚过环入口,慢指针进来了),所以在慢指针第一次走完环长之前,快指针必然能追上它(此处为后面做铺垫)。


判断有否存在环的算法,思路有了很简单:

bool hasCircle(NodeList *head)
{
    NodeList *fast=head;
    NodeList *slow=head;
    while(fast!=NULL&&fast->!=NULL)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(fast==slow) return true;
    }
    return true;
}

看了看大牛写的题目扩展,一般还要求找出环入口的位置,

思路是这样的:


假设相遇时慢指针走了s,则快指针走了2s,两者的差s必然为环长的n倍,即s=nl(l为环长),即如果一个指针S1从链表头出发,另一个指针S2从相遇点出发(两者速度相同),S1走到S2出发点时两者一定会相遇(两者都走了nl),而他们的速度是一样的,说明他们在环入口处其实就相遇了,而且是第一次相遇(就在一起了~~~~),这样我们就能定位到环入口了。


有了思路代码也很简单(环已经存在):

NodeList* findCircleEnter(NodeList* head)
{
    NodeList *fast=head;
    NodeList *slow=head;
    while(fast!=NULL&&fast->!=NULL)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(fast==slow) break;
    }
    slow=head;
    while(slow!=head)
    {
        slow=slow->next;
        fast=fast->next;
    }
    return slow;
}


另外,大牛还引申了“如何判断两个无环单链表是否相交”:运用判断单链表环的想法,将其中一个链表首尾相连,然后判断另一个是否有环,若有环则说明两链表相交。


附上链接:

http://www.cppblog.com/humanchao/archive/2012/11/12/47357.html

判断链表是否存在环(C/C++实现) 在本文中,我们介绍了两种常用的方法来判断链表是否存在环:快慢指针法和哈希表法。通过理解这些方法的原理,并使用相应的源代码实现,我们可以在C/C++编程语言中轻松地判断链表是否存在环。如果链表中存在环,那么快指针最终会追上慢指针,即两个指针会相遇。在本文中,我们将讨论如何使用C/C++编程语言来判断一个链表是否存在环。在链表中,如果一个节点的指针指向了链表中的一个已经访问过的节点,那么这个链表就存在环。换句话说,存在一个节点,它的下一个节点指针指向了链表中的一个之前已经访问过的节点。 阅读详情

相关推荐

Oracle 11g版本下载及安装超详细教程图解

新手Oracle安装教程

weixin_43738344的博客 10万+

查看链表是否有环(数据结构C++表示)

查看链表是否有环有两种方法: 方法一:声明两个指针cur1和cur2,让cur1->next每次都指向下一个结点,cur2每一次都从第一个节点指到cur1当前的结点,然后判断两个指针指向同一个节点的步数,如果步数一样,则说明还没有找到环。如果步数不一样,则说明找到环了。方法二:声明两个指针p和q,p每次走一步,q每次走两步,然后判断p和q是否相等,如果相等的话,说明有环,因为只有在有环的状况下,q

icfhsfmf的专栏 743

芯片详解——AD7606

AD7606详解

weixin_45661757的博客 5020

C++判断一个单链表是否有环

面试时只想到了最简单的遍历方法,每遍历一个节点,都保存节点,到新节点时,从保存的节点中查找是否存在地址相同的,存在就是有环的,否则无环。问我有没有别的方法时,就想不到了。 有环链表 看图更直观。 // 指针节点定义 struct node { int val; struct node *next; node(int x) : val(x), next(NULL) {} }...

Passerby的博客 1996

Cadence仿真笔记(二):传统noise仿真—共源极的噪声

cadence中进行传统噪声仿真

Bao_xue的博客 1万+

ArcGIS基础:CAD数据转换为GIS数据(符号化显示、数据转换、线转面、空间连接)

1、符号化显示: CAD数据加载进来有很多列表,包含了点【point】、线【polyline】、面【polygon】、标注数据【Annotation】等数据,本次实验我们需要用到的是面数据,也就是.dwgPolygong格式的数据。如下图所示: 把数据加载进来,然后在2处打开属性表,查看CAD数据的属性表,打开后可以发现【layer】图层表示就是地块的用地性质,它就是符号化显示的依据。 我们在数据上右键【属性】,打开图层属性,找到【符号系统】,选择类别中的【唯一值】,然后在【值字段】下拉选择【layer】,

yuanYW7556的博客 2万+

C++ 判断链表有没有环

根据链表特点,使用以下技术。

m0_56306892的博客 377

基于SVPWM控制策略的二极管钳位型NPC逆变器并网闭环simulink仿真

本文介绍了二极管钳位型三电平SVPWM技术在逆变器中的应用,通过控制IGBT的开关状态,将直流电压转换为三相交流电压,并采用钳位技术降低谐波失真,提高输出质量。文章还描述了基于SVPWM控制策略的二极管钳位型NPC逆变器并网闭环的Simulink仿真模型,该模型实现了并网控制,具有优异的性能,THD小于1%,适用于新手学习。仿真模型参数包括DC 800V、AC 380V、功率100kw,采用三电平NPC拓扑结构和SVPWM闭环控制策略,配备LCL滤波器,生成三电平波形,监测交流侧电压电流、有功功率和无功功率

2510_91195931的博客 465

C++程序分享--常见编程面试题:判断链表是否有环

这段代码首先定义了一个单链表节点的结构体,然后实现了一个Solution类,其中包含了判断链表是否有环的方法。主函数中创建了一个带环的链表,并展示了如何使用Solution类中的方法来检测出链表中的环。有意找工作的同学,请参考博主的原创:《博主其它经典原创:《

借雨醉东风的博客 587

Android面试指南及参考答案

【摘要】LesPark招聘Android开发工程师,要求3年以上经验,负责客户端功能开发与优化。岗位需掌握Java、多线程、网络编程(TCP/UDP/HTTP)及性能调试工具。面试重点考察:1)核心技术如网络协议选择(TCP可靠消息/UDP实时音视频)、内存泄漏分析;2)业务能力如图片懒加载三级缓存设计、启动速度优化案例;3)高阶系统原理如插件化框架设计;4)行为问题应对策略。建议候选人准备并发编程、JVM差异等深度知识,并量化项目优化成果,尤其关注社交应用相关的图片处理、实时通信等场景题。

郑伟强dev的专栏 804

OpenHands:开源AI智能体开发平台实战指南与架构解析

AI智能体(Agent)作为人工智能领域的关键技术,通过模拟人类的推理与行动循环,能够自主规划并执行复杂任务。其核心原理基于ReAct(Reasoning and Acting)框架,结合规划、工具使用与记忆系统,实现了从感知到决策的闭环。在软件工程领域,AI智能体的技术价值在于将自然语言指令转化为具体的开发操作,从而显著提升代码生成、测试编写和系统维护的效率。典型的应用场景包括自动化代码重构、智能文档生成以及持续集成流程的优化。本文聚焦于OpenHands这一开源AI驱动开发平台,它提供了完整的智能体SD

weixin_27021789的博客 457

单链表OJ题:LeetCode--142.环形链表Ⅱ(判断第一次入环的节点)

LeetCode--142.环形链表Ⅱ:C语言实现的详细题解过程以及题解的证明思路,提供完整代码。

Yikefore的博客 1180

【即插即用模块】Transformer篇 | MICCAI 2025 | ReLULA:Q/K双ReLU线性注意力,既轻又准!

本文介绍了一种基于线性注意力的多实例学习模块(Lin-MIL),适用于高分辨率视觉任务。该模块通过转置计算顺序和使用ReLU激活,将计算复杂度从O(n²d)降至O(nd²),同时提升特征判别性。核心创新包括Q/K双ReLU激活、可学习温度系数和数值稳定归一化。实验表明,该模块在轻量化视觉任务中优于传统线性注意力和Mamba架构。代码实现了模块化矩阵乘法,支持即插即用替换ViT自注意力层。该模块特别适合计算病理学等需要处理大量图像补丁的任务。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 140

java链表

如果不存在相交节点,这一值为 0 * listA - 第一个链表 * listB - 第二个链表 * skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数 * skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数评测系统将根据这些输入创建链式数据结构,并将两个头节点 headA 和 headB 传递给你的程序。— 请注意相交节点的值不为 1,因为在链表 A 和链表 B 之中值为 1 的节点 (A 中第二个节点和 B 中第三个节点) 是不同的节点。二、链表与顺序表的区别。

liuzhenghongshua的博客 168

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【Java 数据结构】单链表与OJ题

本期主要讲解: 1、什么是链表? 2、实现一个单向非循环链表 2.1 实现前的约定 2.2 addFirst 方法 2.3addList 方法 2.4 addIndex 方法 2.5 contains 方法 2.6 remove 方法 2.7 removeAllKey 方法 2.8 size 和 clear 方法 3、单链表OJ题深度解剖 3.1 移除链表元素(来源:LeetCode 难度:简单) 3.2反转链表(来源:LeetCode 难度:简单) 3.4链表中倒数第k个节点(来源:牛客网)...

程序猿教你打篮球的博客 3135

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

单链表OJ题:LeetCode--141.环形链表

LeetCode--141.环形链表(C语言实现):给你一个头节点head,判断这个链表中是否有环。 详细解题过程以及关于本道题拓展的两个面试题。

Yikefore的博客 1581

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

数据结构——单链表OJ题

单链表OJ题目练习

mdjsmg的博客 932

【Java数据结构】单链表详解与经典 OJ 题目实战

本文介绍了Java中单链表的基础理论与实现方法。单链表是一种线性数据结构,每个节点包含数据域和后继指针,仅支持单向遍历。文章详细讲解了单链表的节点结构、特性和与双向链表的差异,并提供了手动实现的完整代码,包括插入、删除、遍历等核心操作。单链表因其结构简单、内存开销低,常用于实现栈、队列和哈希表链地址法等场景。通过5道经典OJ题,帮助读者掌握单链表的理论知识和实战应用。

手心朝下的博客 1577

五大经典链表OJ题讲解

五大链表经典OJ题详解,你确定不来看看吗?慢慢的干货!

程序猿教你打篮球的博客 4475

单链表判断是否有环,并返回环的入口结点——java实现

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。给定一个链表的头节点 head ,返回链表开始入环的第一个节点。给你一个链表的头节点 head ,判断链表中是否有环。

baixian110的博客 296

单链表OJ思路

11道单链表OJ题的解题思路。

x_p96484685433的博客 981

数据结构(Java):力扣单链表面试OJ题

单链表面试题

2401_83595513的博客 2467

【初阶数据结构篇】单链表OJ题(下篇)

须知💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力!你们的支持是我不断进步的动力!🚀 分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对C++感兴趣的朋友,让我们一起进步!

braveact的博客 1271

LeetCode OJ 之 Linked List Cycle (判断链表是否有环)

题目: Given a linked list, determine if it has a cycle in it. Follow up: Can you solve it without using extra space? 给定一个链表,判断链表中是否有环。不能用额外的内存空间。 思路: 链表有环说明所有节点的next都不为空,如果有节点的next为空,说明链表不存在

灯火阑珊处 954

DS:顺序表、单链表的相关OJ题训练(1)

​在DS:单链表的实现和 DS:顺序表的实现这两篇文章中,我详细介绍了顺序表和单链表的实现方法及其相关注意点,uu们可以点击跳转学习。俗话说“光说不练假把式”,下面我们通过几道经典OJ算法题来进行顺序表和单链表的相关训练! ​

白乐天_ξ( ✿>◡❛)的博客 1439

单链表OJ题:LeetCode--160.相交链表

LeetCode--160.相交链表C语言实现的解题思路,有详细的解题思路介绍,还附带图片解析,完整代码,喜欢自取。

Yikefore的博客 1662
上一篇: 文件夹下一类文件重命名
下一篇: leetcode OJ 树的遍历
hellofuturecyj
博客等级 码龄16年 3粉丝 22原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值