力扣第141题和142题-环形链表,是否有环,环的入口节点

news2025/1/13 15:59:05

因这2道题均不改变链表结构,所以可以不创建新的临时头结点

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    if(head==NULL||head->next==NULL)//若只有一个数据结点指向自己head->next!=NULL:head->next!=NULL
    return false;
    struct ListNode*p1=head->next;//一次走一步
    struct ListNode*p2=head->next->next;//一次走两步
    while(p2!=NULL&&p2->next!=NULL)
    {
        if(p1==p2)
        return true;
        p1=p1->next;//不等接着走
        p2=p2->next->next;//p2->next!=NULL

    }//为空无环
    return false;
}

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *detectCycle(struct ListNode *head) {
    //1.处理判断环
    if(head==NULL||head->next==NULL)//没有环;若只有一个数据结点指向自己head->next!=NULL:head->next!=NULL
    return false;
    //定义快慢2个指针
    struct ListNode*p1=head->next;//一次走一步
    struct ListNode*p2=head->next->next;//一次走两步
    while(p2!=NULL&&p2->next!=NULL)
    {
        if(p1==p2)//相遇则有环,此时p2一定比p1多走一圈(类似于操场跑圈),即环的长度n;且p2=2*p1
        //2(x+y)=x+y+n——>x=n-y;或者2(x+y)=x+y+dn——>x=dn-y=n-y+(d-1)n;2者最终化简结果一样
        //x为头结点到入口结点的距离,y为入口结点到相遇结点的距离;所以x+y为从头结点到相遇结点的距离==环的一圈的距离,x+y=n
        //慢指针p1走了x+y的距离,快指针比慢指针多走一圈(或者是多走d圈),即p2=x+y+n
        //因为p2=2*p1,所以2(x+y)=x+y+n;则x+y=n

       break;
        p1=p1->next;//不等接着走
        p2=p2->next->next;//p2->next!=NULL

    }//为空无环
    if(p2==NULL||p2->next==NULL)//没有环
    return NULL;
    //2.计算环的长度
    int n=1;//n为环的长度
    p1=p1->next;//p1从头开始,走到x+y处即一个n
    while(p1!=p2)//p2还在之前相遇的结点处,x+y处
    {
        n++;
        p1=p1->next;
    }
    //3.入口处的结点距离为x,现在求x
    p1=head;//先走的指针
    p2=head;//后走的指针
    while(n>0)//让p1先走n步,即p1先走一圈,走到x+y处,则n-y=x,即p1再走x步就到入口处x
    {
        p1=p1->next;
        n--;
    }//此时p1==x+y,p2==head;2者均再走x步同时到达x处相遇

    while(p1!=p2)//现在p1,p2同时走,均一次一步;再次相遇时就是入口处,即p1==p2
    {
        p1=p1->next;
        p2=p2->next;
    }
    return p1;//相遇的点就是入环点


}

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

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

相关文章

恶劣天候鲁棒三维目标检测论文整理

恶劣天候鲁棒三维目标检测论文整理 Sunshine to Rainstorm: Cross-Weather Knowledge Distillation for Robust 3D Object DetectionRobo3D: Towards Robust and Reliable 3D Perception against CorruptionsLossDistillNet: 3D Object Detection in Point Cloud Under Harsh W…

2024目前网上最火短剧机器人做法,自动搜索发剧 自动更新资源 自动分享资源

目前整个项目圈子很多的短剧机器人,我写的,自动搜索发剧,自动更新资源,自动分享资源,前段时间大部分做短剧的都是做的短剧分成,我的一个学员做的30W播放量才200块收益,备受启发,我就…

迷你手持小风扇到底哪个牌子最好?揭秘迷你手持手持小风扇排行榜

在炎炎夏日,迷你手持小风扇成为了我们不可或缺的清凉伴侣。然而,面对市场上琳琅满目的品牌,迷你手持小风扇到底哪个牌子最好?今天,我将揭秘迷你手持小风扇排行榜,带大家一探各大品牌的魅力,让你…

交叉编译程序,提示 incomplete type “struct sigaction“ is not allowed

问题描述 incomplete type "struct sigaction" is not allowed解决办法 在代码的最顶端添加如下代码即可 #define _XOPEN_SOURCE此定义不是简单的宏定义,是使程序符合系统环境的不可缺少的部分 _XOPEN_SOURCE为了实现XPG:The X/Open Porta…

Vitis HLS 学习笔记--抽象并行编程模型-控制驱动与数据驱动

目录 1. 简介 2. Takeaways 3. Data-driven Task-level Parallelism 3.1 simple_data_driven 示例 3.2 分析 hls::task 类 3.3 分析通道(Channel) 3.4 注意死锁 4. Control-driven Task-level Parallelism 4.1 理解控制驱动的 TLP 4.2 simple_control_driven 示例 4…

59 多次 mmap 虚拟地址的关系

前言 这是来自于网友的一篇帖子 然后 我们这里来探究一下这个问题 主要是 多次连续的 mmap 获取到的 虚拟地址区域 是否连续 以及 衍生出的一些其他的问题 从 mmap 的实现 我们可以知道, mmap 的空间是 自顶向下 分配的, 因此 两块空间应该是连续的, 第一块在上面, 第二块…

二百三十七、Hive——DWS层生成每个清洗字段的异常情况记录

一、目的 在Hive中对每种业务数据的清洗字段的异常数据进行记录 例如这张图,上面是原始数据,下面是每台雷达每天的异常字段的记录 二、实施步骤 (一)建表 create table if not exists dws_data_clean_record_queue(data_ty…

Go团队:Go是什么

2024年的Google I/O大会[1]如期而至。 这届大会的核心主旨毫无疑问是坚定不移的以AI为中心:Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro[2],然后面对OpenAI GPT-4o的挑衅,谷歌在大会上直接甩出大杀器Project Astra[3]…

关于pytest中用例名称使用中文乱码的解决

场景:使用pytest.mark.parametrize装饰器为用例自定义名称时,运行显示乱码。如下图所示: 解决方案: 1.在根目录 pytest.ini中增加一行代码 [pytest] disable_test_id_escaping_and_forfeit_all_rights_to_community_supportTrue…

学习使用博客记录生活

学习使用博客记录生活 新的改变 今天新的开始,让我用图片开始记录吧 看这个背景图片怎么样

微信小程序实现容器图片流式布局功能,配合小程序原生框架使用。

小程序实现容器图片流式布局功能,因为目前论坛上也有很多博主出过类似的文章,这里我就以一个小白角度去讲一下如何实现的吧。给作者一点点鼓励,先点个赞赞吧👍,蟹蟹!! 目标 实现下方效果图 技术…

基金/证券项目如何进行非交易日数据补全(实战)

一些大数据开发的项目,特别是基金/证券公司的项目,都经常会涉及到交易日与非交易日的概念。 如果要让你对一张交易日跑批的主表,怎么去补全非交易日的数据呢? 在遇到这种情况的时候,我们要去怎么处理?来&…

模板编译之入口分析

Vue 是一个渐进式 JavaScript 框架,提供了简单易用的模板语法,帮助开发者以声明式的方式构建用户界面。Vue 的模板编译原理是其核心之一,它将模板字符串编译成渲染函数,并在运行时高效地更新 DOM。本文将深入探讨 Vue 模板编译的原…

图片分类模型训练及Web端可视化预测(下)——Web端实现可视化预测

Web端实现可视化预测 基于Flask搭建Web框架,实现HTML登录页面,编写图片上传并预测展示页面。后端实现上一篇文章所训练好的模型,进行前后端交互,选择一张图片,并将预测结果展示到页面上。 文章目录 Web端实现可视化预测…

前端基于word模板导出word文档

项目环境 vue2 js vue-cli等 依赖包都可以在npm官网找到对应文档 npm官网(英文) 1、依赖 安装依赖 docxtemplater npm i docxtemplaterfile-saver npm i file-saverjszip-utils npm i jszip-utilsjszip npm i jszip在对应页面或模块中引入依赖 import Docxtemplater …

探索AI写作工具:五款推荐

在现实生活中,除了专业的文字工作者,各行各业都避免不了需要写一些东西,比如策划案、论文、公文、讲话稿、总结计划……等等。而随着科技的进步,数字化时代的深入发展,AI已经成为日常工作中必不可少的工具了&#xff0…

智慧之选:开源与闭源大模型的未来探索

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

有一个3x4的矩阵,要求编写程序求出其中值最大的那个元素,以及其所在的行号和列号

解题思路: 先考虑解此问题的思路。从若干数中求最大数的方法很多,现在采用"打擂台"的算法。如果有若干人比武,先有一人站在台上,再上去一人与其交手,败者下台,胜者留在台上。第3个人再上…

selenium安装出错

selenium安装步骤(法1): 安装失败法1 第一次实验,失败 又试了一次,失败 安装法2-失败: ERROR: Could not install packages due to an EnvironmentError: [WinError 5] 拒绝访问。: c:\\programdata\\a…

【C++题解】1697. 请输出n~1之间所有的整数

问题:1697. 请输出n~1之间所有的整数 类型:循环 题目描述: 从键盘读入一个整数 n ,请输出 n∼1 之间所有的整数,每行输出 1 个。 比如,假设读入 n5 ,输出结果如下: 5 4 3 2 1 输入&#xff1…