当前位置: 首页 > news >正文

leetcode 142 环形链表II

题目

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。
如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。
不允许修改 链表。
示例 1:
在这里插入图片描述
示例 2:
在这里插入图片描述

示例 3:
在这里插入图片描述
提示
链表中节点的数目范围在范围 [0, 104] 内
-105 <= Node.val <= 105
pos 的值为 -1 或者链表中的一个有效索引

解析

定义头节点到环的入口为x,入口到相遇点为y,相遇点到入口为z

怎么确定链表是否有环?

定义快指针每次移动两个位置,慢指针每次移动一个位置,那么根据相当运动,来说,慢指针不动,快指针每次动一个单位,所以如果有环则快指针一定可以追上慢指针,也可也列出下面图片中的式子
在这里插入图片描述

怎么找到环的入口?

上述推导可以发现,在相遇之后,如果从相遇点出发,宁外一个指针从链表的头节点出发,那么他们相遇的位置就是环的入口

代码

/*** Definition for singly-linked list.* struct ListNode {*     int val;*     ListNode *next;*     ListNode(int x) : val(x), next(NULL) {}* };*/
class Solution {
public:ListNode *detectCycle(ListNode *head) {ListNode *fast=head;ListNode *slow=head;// 1.双指针寻找相遇点while(fast!=NULL&&fast->next!=NULL){slow=slow->next;fast=fast->next->next;// 2.快慢指针相遇,寻找环的入口if(fast==slow){ListNode *index1=fast;ListNode *index2=head;while(index1!=index2){index1=index1->next;index2=index2->next;}return index2;}}return NULL;}
};

通过

在这里插入图片描述

http://www.lryc.cn/news/281395.html

相关文章:

  • 电阻表示方法和电路应用
  • 论文笔记(三十九)Learning Human-to-Robot Handovers from Point Clouds
  • 浅学Linux之旅 day2 Linux系统及系统安装介绍
  • 探索未来餐饮:构建创新连锁餐饮系统的技术之旅
  • Unity组件开发--AB包打包工具
  • 毕业设计:基于python微博舆情分析系统+可视化+Django框架 K-means聚类算法(源码)✅
  • xbox如何提升下载速度?
  • day13 滑动窗口最大值 前K个高频元素
  • Unity——VContainer的依赖注入
  • 【面试突击】Spring 面试实战
  • 【Linux】Ubuntu 22.04 上安装最新版 Nextcloud Hub 7 (28.0.1)
  • PHP项目如何自动化测试
  • WEB 3D技术 three.js 3D贺卡(1) 搭建基本项目环境
  • 短视频IP运营流程架构SOP模板PPT
  • python爬虫之线程与多进程知识点记录
  • 基于Java (spring-boot)的停车场管理系统
  • 微软Office 2019 批量授权版
  • ChatGLM2-6B 大语言模型本地搭建
  • WindowsServer安装mysql最新版
  • gin切片表单验证
  • openssl3.2 - 官方demo学习 - certs
  • Datawhale 大模型基础理论 Day1 引言
  • HarmonyOS应用开发学习笔记 UIAbility组件与UI的数据同步 EventHub、globalThis
  • leetcode每日一题44
  • idea写sql语句快捷键提醒,mapper注解开发,mybatis
  • 002 Golang-channel-practice
  • MFC为对话框资源添加类
  • SpringBoot新手入门完整教程和项目示例
  • PHP留言板实现
  • ssm+vue的物流配送人员车辆调度管理系统的设计与实现(有报告)。Javaee项目,ssm vue前后端分离项项目。