寻找环形链表的入环点

news2024/11/24 13:53:24

之前我们在判断一个链表是否为环, 是运用快慢指针的方法,且只能是慢指针走一步,快指针两步;

那么如何求带环链表的入环点的
思路一:数学方法(找出带环链表各个特点量的关系)
在这里插入图片描述
代码:

struct ListNode *detectCycle(struct ListNode *head) {
//快慢指针判断是否为环
    struct ListNode *slow;
    struct ListNode *fast;
    slow=fast=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(fast==slow)//相遇点
        {
            struct ListNode *meet=fast;//定义一个相遇点指针
            while(head!=meet)
            {
                head=head->next;
                meet=meet->next;
            }
            return head;
        }

    }
    return NULL;//不为环,就没有入环点返回空
}

思路2:转换法,转化为求两个链表的交点,
在这里插入图片描述
代码:

struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
   
    struct ListNode *cur1=headA;
    struct ListNode *cur2=headB;
    int long1=1;
    int long2=1;
    //找到两链表的尾节点,并算数各自的长度
    while(cur1->next)
    {
        cur1=cur1->next;
        long1++;
    }
     while(cur2->next)
    {
        cur2=cur2->next;
        long2++;
    }
    //如果尾节点不相等,就不会相交
    if(cur1!=cur2)
    {
        return NULL;
    }
    //abs函数求出绝对值(两节点的长度差)
    int k=abs(long1-long2);
//假设法找到巧妙运用到长节点
   struct ListNode *longList=headA;
   struct ListNode *shortList=headB;
   if(long1<long2)
   {
         longList=headB;
         shortList=headA;
   }
   //长的先走k步
   while(k--)
   {
       longList=longList->next;
   }
   //一起走
   while(longList!=shortList)
   {
       longList=longList->next;
       shortList=shortList->next;
   }
   //返回交点longList或shortList
   return longList;

}
struct ListNode *detectCycle(struct ListNode *head) {
//快慢指针判断是否为环
    struct ListNode *slow;
    struct ListNode *fast;
    slow=fast=head;
    while(fast&&fast->next)
    {
        fast=fast->next->next;
        slow=slow->next;
        if(fast==slow)//相遇点
        {
            struct ListNode *newhead=slow->next;
            slow->next=NULL;
            struct ListNode *meet=getIntersectionNode(head,newhead);//求两链表的交点
            return meet;
        }

    }
    return NULL;//不为环,就没有入环点返回空
}

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

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

相关文章

Linux设备驱动之Camera驱动

Linux设备驱动之Camera驱动 Camera&#xff0c;相机&#xff0c;平常手机使用较多&#xff0c;但是手机的相机怎么进行拍照的&#xff0c;硬件和软件&#xff0c;都是如何配合拍摄到图像的&#xff0c;下面大家一起来了解一下。 基础知识 在介绍具体Camera框架前&#xff0c…

图像复原与重建,解决噪声的几种空间域复原方法(数字图像处理概念 P4)

文章目录 图像复原模型噪声模型只存在噪声的空间域复原 图像复原模型 噪声模型 只存在噪声的空间域复原

字节一面:你能手撕节流防抖吗?

前言 最近博主在字节面试中遇到这样一个面试题&#xff0c;这个问题也是前端面试的高频问题&#xff0c;节流防抖是前端性能优化一个很重要的手段&#xff0c;所以作为一个前端工程师必须要深入掌握这个知识点&#xff0c;博主在这给大家细细道来。 &#x1f680; 作者简介&…

01 TextRNN FastText TextCNN-04-训练要点,实验过程

TextRNN & FastText & TextCNN-03-模型总览&#xff0c;后 训练要点 RNN训练 得出来的y&#xff08;m&#xff09;&#xff08;预测标签&#xff09;是每一个分类的概率&#xff0c;比如是一个五分类&#xff0c;化成5个格子&#xff0c;每一个格子是概率&#xff0c…

java生成PDF的Util

java使用itext生成pdf-CSDN博客 接上文 支持表格绘制表格 支持表格中的文本 字体加粗、字体上色、单元格背景上色&#xff0c; 支持拼接文本 支持单行文本 多种背景颜色、字体上色 支持自定义水印 废话不说先上效果图 工具类代码 package com.zxw.文件.PDF.util;import …

建立一张表: 表里面有多个字段,每一个字段对应一种数据类

首先mysql -uroot -p 进入MySQL 选择一个数据库并使用 在该数据库内创建表格 create table homework_tb( id int(11) comment 编号, company_name char(6) comment 公司名称, introduce varchar(100) comment 介绍, content1 tinytext comment 内容1, co…

ad18学习笔记十一:显示和隐藏网络、铺铜

如何显示和隐藏网络&#xff1f; Altium Designer--如何快速查看PCB网络布线_ad原理图查看某一网络的走线_辉_0527的博客-CSDN博客 AD19(Altium Designer)如何显示和隐藏网络 如何显示和隐藏铺铜&#xff1f; Altium Designer 20在PCB中显示或隐藏每层铺铜-百度经验 AD打开与…

React【Context_作用、函数组件订阅Context、Fragments 、错误边界_概念 、错误边界_应用、Refs DOM】(四)

目录 Context_作用 函数组件订阅Context Fragments 错误边界_概念 错误边界_应用 Refs & DOM Context_作用 React组件中数据是通过 props 属性自上而下&#xff08;由父及子&#xff09;进行传递的&#xff0c;但是有的时候中间的一些组件可能并不需要props的值。 //A…

深度学习自学笔记一:神经网络和深度学习

神经网络是一种模拟人脑神经元之间相互连接的计算模型&#xff0c;它由多个节点&#xff08;或称为神经元&#xff09;组成&#xff0c;并通过调整节点之间的连接权重来学习和处理数据。深度学习则是指利用深层次的神经网络进行学习和建模的机器学习方法。 假设有一个数据集&a…

电阻的读数

常见电阻的阻值一般有色环电阻和贴片电阻 &#xff0c;下面介绍两种电阻的阻值读法。 1、色标法&#xff1a; 技巧&#xff1a;四环电阻的的精度一般为银色和金色&#xff0c;如果一眼能可看到这两种颜色可以判断为第4环的精度读数 可见棕色为第1环&#xff0c;黑色第2环&…

Three.js后期处理简明教程

后期处理&#xff08;Post Processing&#xff09;通常是指对 2D 图像应用某种效果或滤镜。 在 THREE.js 中我们有一个包含一堆网格物体的场景。 我们将该场景渲染为 2D 图像。 通常&#xff0c;该图像会直接渲染到画布中并显示在浏览器中&#xff0c;但我们可以将其渲染到渲染…

AI写文章软件-怎么选择不同的AI写文章软件

在如今信息爆炸的时代&#xff0c;无论是学生、职场人士&#xff0c;还是创作者和企业家&#xff0c;写文章都是一项常见而又重要的任务。然而&#xff0c;随着科技的不断进步&#xff0c;AI写文章的软件也逐渐走进了人们的视野。 147GPT批量文章生成工具​www.147seo.com/post…

Java 基于微信小程序的学生选课系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 第一章&#xff1a; 简介第二章 技术栈第三章&#xff1a; 功能分析第四章 系统设计第五章 系统功…

Intel酷睿和AMD锐龙

Intel酷睿系列&#xff0c;主要分i3、i5、i7、i9 如&#xff1a;Intel 酷睿i5 10210U i5&#xff1a;品牌修饰符。 10&#xff1a;代次指示符。 210&#xff1a;sku编号。 常见后缀&#xff1a; G1-G7&#xff1a;集显等级。 U&#xff1a;低功耗。 H&#xff1a;标压版…

通俗易懂了解大语言模型LLM发展历程

1.大语言模型研究路程 NLP的发展阶段大致可以分为以下几个阶段&#xff1a; 词向量词嵌入embedding句向量和全文向量理解上下文超大模型与模型统一 1.1词向量 将自然语言的词使用向量表示&#xff0c;一般构造词语字典&#xff0c;然后使用one-hot表示。   例如2个单词&…

GeekRUN-7芯片跑分表

前两个字母是芯片简写&#xff0c;如麒麟&#xff0c;是QL&#xff0c;骁龙是XL&#xff0c;天玑是TJ&#xff0c;第一串数字是最高值&#xff0c;第二串是最低值&#xff0c;省电模式差不多这个水平。QL9K是麒麟9000&#xff0c;QL9S

aix360-gec

目录 分组条件期望&#xff08;GroupedCE&#xff09;解释程序创建虚拟环境导包加载数据集训练模型计算独立条件期望ICEplot_ice_explanation 计算分组条件期望 (GCE)plot_gce_explanation 记录一下学习过程&#xff0c;官方的代码在https://github.com/Trusted-AI/AIX360/tree…

High-Resolution Side Channels for Untrusted Operating Systems【ATC‘17】

目录 摘要引言贡献• 一个不受信任的操作系统的两个新的高分辨率侧通道来攻击受保护的应用程序&#xff1b;• 对 libjpeg 的显着改进攻击和针对 VC3 的新攻击&#xff1b;• 侧通道攻击对不受信任的操作系统的重要性增加。 系统模型背景Intel SGX页面错误通道时间限制空间限制…

微信小程序案例2-3:婚礼邀请函

文章目录 一、运行效果二、知识储备&#xff08;一&#xff09;导航栏设置1、导航栏的相关配置项2、利用导航栏组件2、在页面配置文件中对导航栏进行配置3、在全局配置文件中对导航栏进行配置 三、实现步骤 一、运行效果 “婚礼邀请函”微信小程序由4个页面组成&#xff0c;分别…

Springboot整合分页插件pagehelper

首先需要有一定的springbootmybatis的基础&#xff0c;才能使用顺畅 项目结构如下 引入依赖&#xff0c;springboot版本选的是2.7.16版本&#xff0c;jdk选的17&#xff0c; <!--分页插件--> <dependency><groupId>com.github.pagehelper</groupId><…