环形链表 2:找出入环的第一个节点

news2024/11/20 9:31:37

题目描述:

给定一个链表返回链表开始入环的第一个点。如果链表无环,则返回NULL。

为了表示给定链表中的环,我们使用整数pos来表示链表尾连接到链表中的位置(索引从0开始)。如果pos是-1,则在该链表中没有环。

注意,pos仅仅是用于标识环的情况,并不会作为参数传递到函数中。

说明:不允许修改给定的链表。

 

 

做此题之前,我们先来推理一个结论,

结论:一个指针从meet(slow和fast相遇的地方)开始走 ,一个指针从链表头开始走,它们会在入口点相遇

 假设slow一次走一步,fast一次走两步,那么slow在他们相遇的.地方时,slow走过的距离为L+X(slow进环之后,在一圈之内,fast一定能追上slow,因为slow走一圈,fast走两圈),而fast走过的距离为L+N*C+X,L+N*C+X=2(L+X),N*C-X=L.,(N-1)*C+C-X=L, 结论得证。

解题思路:

根据这个结论,我们就可以对这道题有个具体思路:还是用while循环,如果fast或者fast-next为空,就跳出循环,return NULL;若有环,则就定义快指针和慢指针,再定义一个结构体指针记录二者相遇的点即meet,根据结论,meet和head同时开始遍历,当二者相遇时,相遇的点即为环的初始点。

代码如下:

struct ListNode* detectCycle(struct ListNode *head)
{
	struct ListNode* slow = head, *fast = head;
	while (fast && fast->next)
	{
		slow = slow->next;
		fast = fast->next->next;
		//推导的结论:一个指针从相遇点开始走,一个指针从head走,他们会在入口点相遇
		if (slow == fast)
		{
			struct ListNode* meet = slow;
			while (head != meet)
			{
				head = head->next;
				meet = meet->next;
			}
			return meet;
		}
	}
	return NULL;
}

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

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

相关文章

D3485国产芯片+5V工作电压, 内置失效保护电路 具有+15kV IEC 61000-4-2接触放电保护能力 SOP8封装

D3485是一款5V供电、半双工的RS-485收发器,芯片内部包含一路驱动器和路接收器。D3485使用限摆率驱动器,能显著减小EMI和由于不恰当的终端匹配电缆所引起的反射,并实现高达10Mbps的无差错数据传输。D3485内置失效保护电路,保证接收…

【网络安全技术】密钥管理

一、分级密钥概念 典型的密钥分级分为三级,三级密钥就是一次会话的session key,用来加密通信,所以通常使用对称密钥。 二级密钥就是分发三级密钥的密钥,用来加密三级密钥来分发三级密钥。 一级密钥就是分发二级密钥的密钥&…

Markdown语法入门与进阶指南

一、Markdown简介 Markdown是一种轻量级标记语言,创始人为约翰格鲁伯(john Gruber)。它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档。这种语言吸收了很多在电子邮件中…

RedHat8 安装部署DzzOffice协同办公平台+onlyoffice(docker)以及问题解决(亲测可用,花费2天)

一、基础配置(MysqlDzzoffice) 1:安装软件需要的环境,我们用LAMP的环境。基本上CentOS8自带的软件版本都达到安装DzzOffice的要求。 2:关闭防火墙(不关的话需要开放80端口自行决定)。 systemctl disable --now fire…

12.4散列查找定义,散列函数,散列查找(开放定址法,处理冲突),总结

散列函数定义 ASL计算 查找长度——在查找运算中,需要对比关键字的次数称为查找长度(有的教材也会把“空指针”的判定算作一次比较) 14,68,19,20,23,11这6个元素查一次就可以&…

分享73个节日PPT,总有一款适合您

分享73个节日PPT,总有一款适合您 73个节日PPT下载 链接:https://pan.baidu.com/s/1FG9Y-9yR31Y-fs3zxKI4Pg?pwd6666 提取码:6666 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不…

轨道交通数字孪生可视化平台,助力城市交通运营智慧化

随着经济和科技的快速发展,轨道交通运营管理在日常操作者面临各种挑战。数字孪生技术被认为是未来轨道交通运营管理的重要手段之一。它可以提高轨道交通的运营效率和安全性,助力城市交通运营智慧化。以城市轨道交通运维管理业务需求为导向,从数据感知、融…

备忘录不小心删了怎么办?如何找回我的备忘录?

如果你的记性不太好,或者每天需要记住、完成的事情很多,那么养成随手记事的好习惯是非常有必要的。因为手机是每个成年人都会随身携带的电子设备,所以直接在手机上记录事情比较简单、便捷。而手机备忘录、便签、笔记等工具类软件,…

docker搭建nginx实现负载均衡

docker搭建nginx实现负载均衡 安装nginx 查询安装 [rootlocalhost ~]# docker search nginx [rootlocalhost ~]# docker pull nginx准备 创建一个空的nginx文件夹里面在创建一个nginx.conf文件和conf.d文件夹 运行映射之前创建的文件夹 端口:8075映射80 docker…

java版微信小程序商城免费搭建 java版直播商城平台规划及常见的营销模式有哪些?电商源码/小程序/三级分销

涉及平台 平台管理、商家端(PC端、手机端)、买家平台(H5/公众号、小程序、APP端(IOS/Android)、微服务平台(业务服务) 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …

c++ atmoic acquire/release

由于多核cpu缓存的存在,以及gcc编译优化,cpu指令层面的优化,导致程序的执行顺序可能跟你写的顺序不完全一致(reorder)。 但是在多线程编程中如何确保各个线程能正确的读取到各个变量呢(而不是cache中老旧的…

springboot集成docker

1、快速构建springboot-demo项目 地址:https://start.spring.io/

二维码智慧门牌管理系统升级解决方案:重新制牌审核快速审批

文章目录 前言一、快速审批与重新安装一、其他系统优势 前言 随着城市化进程的加速,门牌号码的管理变得日益重要。然而,传统的门牌管理方式已经无法满足现代社会的需求。在这样的背景下,二维码智慧门牌管理系统应运而生。但随着系统使用&…

Python---练习:列表赋值---追加append尾部追加元素,追加的是一个元素整体

相关链接: Python--列表及其应用场景---增、删、改、查。-CSDN博客 代码: # 列表赋值 a [1, 2, 3] a.append([3, 4]) # append尾部追加元素,追加的是一个元素整体:[3, 4] print(a)

动手学深度学习笔记

1. 深度学习基础与MLP 1.1 框架: 线性回归; Softmax回归(实际上用于分类问题); 感知机与多层感知机; 模型选择; 权重衰退(weight decay); 丢弃法&…

利用ChatGPT轻松实现科研论文高效写作

2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认为未来各行各业如果不能搭上这班车…

等保的未来走向如何?

等级保护有近20年的发展历程,在此期间等级保护制度从无到有,从定级到测评,网络安全工作逐步完善,并在各个行业中得到了切实的实践执行,对我国的网络安全具有重要的指导作用,全面提高了我国网络安全建设和安…

Linux入门攻坚——7、磁盘管理——文件系统挂载管理及RAID、LVM

已经安装文件系统的分区需要经过挂载才能使用。 一切文件系统的使用都是从根开始,根是文件系统的起始点。 计算机启动过程:加电自检——bootloader——kernel——rootfs——/sbin/init kernel第一步要加载根系统。 将额外文件系统与根文件系统某现存的…

陪玩圈子系统:打破单身孤独,展开精彩社交旅程,APP小程序H5,源码交付,支持二开!

近年来,随着社交网络的快速发展,越来越多的人开始寻求各种方式来解决单身孤独的问题。而陪玩圈子系统便应运而生,在为用户提供社交服务的同时也促进了人与人之间的互动和交流。在这个拥有庞大用户数量和各种丰富活动的平台上,你将…

GAN:SNGAN-谱归一化GANs

论文:https://arxiv.org/pdf/1802.05957.pdf 代码:GitHub - pfnet-research/sngan_projection: GANs with spectral normalization and projection discriminator 发表:2018 ICLR 摘要 GANs的主要挑战是:训练的稳定性。本文作…