1.6 如何判断一个较大的单链表是否有环,以及环入口点

如何判断单链表是否有环、环的入口、环的长度和总长 问题描述1.如何判断单链表是否有环? 2.如果有环,求出环的入口 3.求环长 4.求总长注意这里长度:节点的数量 链表定义参考:http://blog.csdn.net/dawn_after_dark/article/details/73610674探讨要想判断有环,我们可以联系实际生活中的例子,很容易就想到操场上跑圈,因为是环形,所以快的肯定会追上慢的,所以我们可以应用到链表上,用一个快指 阅读详情

1.题目

判断一个单链表是否有环,并且环的入口是哪个结点

2.解法

public class Sort {

    /**
     * 方法功能:判断链表是否有环
     * 输入参数: head 链表的头结点
     * 返回值为null,无环,否则返回slow和fast相遇点的结点
     */

    public static Node isLoop(Node head){

        if(head == null || head.next == null){
            return null;
        }

        // 设置起始点相同的快慢指针
        Node slow, fast;
        slow = fast = head.next;

        // 让它退出的条件是什么, fast为null
        while(fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;

            // 正好移动判断,然后退出
            if(slow == fast){
                return slow;
            }
        }
        return null;
    }

    /**
     * 方法功能: 得到环入口点
     * 输入参数: 链表的头结点, 快慢结点的相遇点
     * 输出: 环入口点
     */

    public static Node findLoopNode(Node head, Node meetNode){
        Node first = head.next;
        Node second = meetNode;

        while(first != second){
            first = first.next;
            second = second.next;
        }

        return first;
    }

    /* 构造链表 */
    public static Node constructList(){
        // 假的头结点
        Node head = new Node(-1);
        Node cur = head;
        Node tmp = null;

        for(int i = 1; i < 8; i++){
            tmp = new Node(i);
            cur.next = tmp;
            cur = tmp;
        }

        cur.next = head.next.next.next;
        return head;
    }

    public static void main(String[] args) {
        // 1.构造链表
        Node head = Sort.constructList();

        // 2.寻找相遇点
        Node meetNode = Sort.isLoop(head);


        if (meetNode != null){
            System.out.println("此单链表有环,相遇点为" + meetNode.data);
            Node loopNode = Sort.findLoopNode(head, meetNode);
            System.out.println("环的入口点" + loopNode.data);
        } else{
            System.out.println("此链表无环!");
        }
    }
}

在这里插入图片描述
只需要对链表遍历一次,时间复杂度为O(n), 空间复杂度为O(1)

C语言版的单链表常见面试题:判断单链表是否带环,求环的长度,求环的入口 今天主要来解决一下以下几个面试题:1.判断单链表是否带环,若带环,则返回1;如何判断单链表是否带环:在这里,我们可以使用快慢指针。慢指针一次走一步,快指针一次走两步。如果带环,一定会在某个节点处快慢指针相遇;不带环,就会一直遍历到链表结束。(注意:快指针并非可以一次走任意步数,但是若带环每次走两步就一定会相遇);2.若单链表带环,求出环的长度;这个就比较easy了,在上一题的基础上,当快慢指针相遇... 阅读详情

相关推荐

ZBrush 2021来了

这次给大家带来的是:zbrush2021.1.1 win安装教程 1.下载压缩包之后解压到文件夹当中,然后打开ZBrush_2021_Installer.exe进行软件安装, 如下图 2.在这里我们保持默认的简体中文版即可,然后点击确认,如下图 3.第三步我们点击前进即可,如下图 4.第四步我们来到许可协议,在这里我们点击我接受此协议,然后点击前进,如下图 5.第五步我们来到安装目录,在这里我们可以设置安装路径,如下图 6.在这里我将安装目录修改安装到E盘为例,然后点击下一

3D游戏建模 1189

判断单链表是否有环,并找出环的入口【python】

 参考链接:数据结构面试 之 单链表是否有环及环入口点 附有最详细明了的图解 - 简书 https://www.jianshu.com/p/ef71e04241e4 判断单向列表是否包括环,若包含,环入口的节点计算 python实现 - 鲸落丶 - 博客园 https://www.cnblogs.com/kunpengv5/p/7784791.html 判断链表是否有环以及环的入口点(...

yangnianjinxin的博客 1万+

【测试】echo发送和接收TCP/UDP数据包|shell 发送TCP/UDP数据包

目录 通过/dev/tcp、/dev/udp shell给tcp或udp服务发送16进制报文指令 通过/dev/tcp、/dev/udp (https://blog.csdn.net/u010039418/article/details/86251470) 通过/dev/tcp、/dev/udp可以直接在shell脚本中发起tcp、udp连接,方便又高效,平时用于测试啥的还是挺方便的。 直接发送 格式 /dev/udp/ip/port 比如要向本地10001端口发送数据,可以使用 ec.

我的笔记本 1万+

判断单链表是否有环并找到环的入口等问题

判断单链表是否有环并找到环的入口等问题 假设一个单链表有环,他就是下面的这种情况: 我们有下面几个问题: 1.给一个单链表,判断其中是否有环的存在; 2.如果存在环,找出环的入口点; 3.如果存在环,求出环上节点的个数; 4.如果存在环,求出链表的长度; 对于这些问题有一种方法就是...

weixin_42078660的博客 7776

Vue3+codemirror6实现公式(规则)编辑器

vue3+codemirror6+ts实现公式编辑器,可以插入标签、公式,也有补全提示

小阮的笔记本 5053

保姆级教程:用OpenCV搞定鱼眼双目相机的标定与测距(附完整C++代码)

本文详细介绍了使用OpenCV进行鱼眼双目相机标定与测距的全流程,包括环境搭建、数据采集、单目标定、双目标定、立体校正和视差计算等核心步骤。通过完整的C++代码示例和参数调优指南,帮助开发者快速实现高精度的双目测距系统,适用于机器人导航、VR全景拍摄等领域。

weixin_42573113的博客 389

判断一个较大的单链表是否有环及求环的入口点

/*判断单链表中是否有环*/ struct ListType { int data; struct ListType *next; }; typedef struct ListType *list; int IsLoop(list s) {//双指针法 list fast = s; list slow = s; if(fast == NULL) return -1;

hello2sys_cs的专栏 621

winedt + miktex + SumatraPDF 搭建latex环境

整个环境包含三部分: - winedt: 前端编辑器 - miktex: 后端编译器 - SumatraPDF: 预览器顺序无关紧要, 不过如果先装miktex的话, 可能会被winedt在安装的时候自动找到路径从而不需要设置.1.安装miktex首先在latex-project官网, 打开”get”后, 有四种平台: Linux, Mac OS, Windows, Online. 我写论文

Iteration makes perfection. 6491

如何判断一个单链表是否有环以及环入口

这是一个在我们学习数据结构的时候经常会遇到的问题,今天给大家带来这个问题的几种解法。 方法一 最容易想到的办法就是遍历单链表,如果单链表有环的话那么会进入死循环,但是我们不知道单链表的长度,所以如果单链表长度很长,我们一直向下遍历,也无法分辨出是单链表还没遍历完还是进入了死循环。 所以这种解法不靠谱。 方法二 我们可以在遍历单链表中的每个元素的时候,每遍历一个新的节点,就从头再开...

lebronchen的博客 8700

WorkBuddy驱动SolidWorks实测:AI建模流程、参数化与许可排查指南

AI辅助三维建模正在改变工程师的重复劳动方式。其核心理念不是替代人的设计决策,而是通过AI智能体接管CAD软件中的草图绘制、特征创建、尺寸修改等高频操作,让工程师从繁琐的GUI交互中解放出来。在SolidWorks这类主流CAD平台上,这类AI助手的落地依赖环境稳定、需求描述清晰和参数化建模规范。通过将外径、孔距等关键尺寸定义为全局变量并用方程式驱动,可实现改一个数、模型自动更新的高效流程;同时,遇到“无法获得许可”等环境故障时,需要按服务状态、安全软件隔离、干净卸载的顺序排查。以WorkBuddy驱动So

weixin_28559803的博客 373

5G NR LDPC码(2)—— 从基图到速率匹配:解码5G高速数据信道的标准化设计

本文深入解析了5G NR LDPC码的标准化设计流程。从作为核心骨架的基图(BG1/BG2)出发,详细阐述了其如何通过扩展因子Z灵活生成实际校验矩阵,并协同传输块大小计算与分段策略。文章重点剖析了基于循环缓存和冗余版本的速率匹配机制,以及其如何高效支撑增量冗余混合自动重传请求,从而确保5G高速数据信道在复杂环境下的可靠与高效传输。

weixin_29206669的博客 273

【算法】如何判断链表有环

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

Mlib 8万+

影像组学文章复现:ITHscore:通过多尺度放射学特征全面定量NSCLC肿瘤内异质性 ----小细胞肺癌肿瘤异质性评分

目的:通过计算机断层扫描(CT)图像量化非小细胞肺癌(NSCLC)的肿瘤内异质性(ITH)。 方法:整合局部辐射特征和全局像素分布模式,开发定量ITH测量-ITHscore。在六个患者队列(n = 1399)中检查ITHscore与肿瘤表型,基因型和患者预后的关联,以验证其在表征ITH方面的有效性。

xxx 1020

【Java数据结构】判断单链表是否有环,并且找出环的入口

一:判断是否有环 思路:使用快慢引用法解决 是否有环 假设链表是一个有环链表,且由f指向c构成环。那么 使用两个指针 A 和 B,让两指针同时向后遍历 而且B的遍历速度是A的两倍,呢么如果是有环的话,B终究会追上A。因此我们可以 以AB是否相遇作为判断是否有环的必要条件。 下面是图...

懂技术的猫 4638

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

判断单链表是否有环,如何寻找环的入口结点

今天我们来讨论一个有趣的链表问题,判断链表是否有环,如果有环,环的入口结点如何寻找? 文章目录1. 如何判断一个单链表是否有环呢? 1. 如何判断一个单链表是否有环呢?

张凯 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

笔试题:如何判断单链表是否存在环

给定一个单链表,只给出头指针h:1、如何判断是否存在环?2、如何知道环的长度?3、如何找出环的连接点在哪里?4、带环链表的长度是多少? 解法:1、对于问题1,使用追赶的方法,设定两个指针slow、fast,从头指针开始,每次分别前进1步、2步。如存在环,则两者相遇;如不存在环,fast遇到NULL退出。2、对于问题2,记录下问题1的碰撞点p,slow、fast从该点

liuxialong的专栏 3万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

判断单链表是否有环

判断单链表是否有环?如何找到环的“起始”点?如何知道环的长度?    相关题目:  (1)找出单链表的倒数第 4个元素。找出单链表的中间元素。  (2)判断两个单链表是否相交,若两个单链表相交,计算相交点。  解题思路:  (1)判断是否有环。采用快慢指针的思路,一个指针一次移动一个结点,另一个指针移动两个结 点。  如果有环,则进入环后,快指针肯定可以追赶上慢指针,这样就会出现两

陈曦的专栏 1万+

判断链表中是否有环 ----- 有关单链表中环的问题

首先,关于单链表中的环,一般涉及到一下问题: 1.给一个单链表,判断其中是否有环的存在; 2.如果存在环,找出环的入口点; 3.如果存在环,求出环上节点的个数; 4.如果存在环,求出链表的长度; 5.如果存在环,求出环上距离任意一个节点最远的点(对面节点); 6.(扩展)如何判断两个无环链表是否相交; 7.(扩展)如果相交,求出第一个相交的节点;

doufei_JLU_CCST_08 7926

链表--如何检测一个链表是否有环及如何找到环的入口点

如何检测一个链表是否有环 有环的链表: 有环的链表是指链表有环路,例如A-&amp;gt;B-&amp;gt;C-&amp;gt;D-&amp;gt;E-&amp;gt;F-&amp;gt;B,遍历的时候B-&amp;gt;C-&amp;gt;D-&amp;gt;E-&amp;gt;F-&amp;gt;B会形成环路一直循环。 思路: 设置一个快指针fast,一个慢指针slow,二者初始都指向链表头,fas

yangruxi的博客 1万+

Java---------判断一个单链表是否有环及找环的入口

什么是环?      单链表有环,是指单链表中某个节点的next指针域指向的是链表中在它之前的某一个节点,这样在链表的尾部形成一个环形结构。   如上图,最后一个节点指向了第三个节点,所以后面四个节点构成了一个环,怎么判断单链表是否有环呢?     一.快慢指针法判断有无环:   1.算法思路:可以定义快慢指针(fast和slow),让fast每次步径是slow的两倍,因为fast是两步两步...

xxxxxxyao的博客 4651

单链表中如何判断是否有环以及判断环的入口点

这里写目录标题问题展示代码展示代码思考 问题展示 如标题所示 代码展示 #include <iostream> class Node{ public: Node* next; }; //核心代码 bool isExitloop(Node* head) { Node* slow = head; Node* fast = head; while( fast && fast->next) { slow = slow->next; fast = fas

qq_27577503的博客 431

Java 判断单链表是否有环如果有环找到入口点

判断单链表是否有环如果有环找到环的入口点

WYSCODER的博客 773

判断单链表是否存在环,判断两个链表是否相交问题详解

有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题:1、如何判断一个链表是不是这类链表?2、如果链表为存在环,如果找到环的入口点?解答:一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则f

ldong2007的专栏 6607

判断单链表是否存在环及求环入口点

判断单链表是否存在环及求环入口点 算法描述: 1、先判断是否有环 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表) 1 bool isExitsLoop(list *head) 2 { 3 ...

weixin_30700977的博客 120

判断单链表是否存在环及寻找环的入口点

判断一个单链表是否存在环的解法如下: 1.遍历链表,将链表的节点存入hash表内,若遍历到后面的节点已存在hash表内,说明有环。时间:O(n) 空间:O(n) 2.反转链表,时间:O(n) 空间:O(1),使用3个指针:pNext、pPrev、pCur。这种方法有副作用,就是若存在环的话,无法还原到链表原始状态。(弃用) 3.快慢指针法,时间:O(n) 空间:O(1)。 问题1...

ZWM990425424的博客 258
上一篇: 5404. 用栈操作构建数组
下一篇: Vmware中虚拟机连不上网(除了常见方式之外,设置静态IP)
念殊15
博客等级 码龄8年 17粉丝 177原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值