每日一题:链表中环的入口结点
文章目录
- 判断链表环的入口节点
- 描述
- 数据范围:
- 复杂度要求:
- 输入
- 输出
- 示例
- 代码实现
- 思路解析
- 注意事项:
判断链表环的入口节点

描述
给定一个链表,判断该链表是否存在环。如果存在环,返回环的入口节点;如果不存在环,返回NULL。
数据范围:
- 链表长度 n n n: 0 ≤ n ≤ 10000 0 \leq n \leq 10000 0≤n≤10000
- 链表中任意节点的值满足 ∣ v a l ∣ ≤ 100000 |val| \leq 100000 ∣val∣≤100000
复杂度要求:
- 空间复杂度: O ( 1 ) O(1) O(1)
- 时间复杂度: O ( n ) O(n) O(n)
输入
- 输入一个链表的头节点
pHead,该链表可能包含环。
输出
- 如果链表存在环,返回环的入口节点;否则返回
NULL。
示例
示例 1:
输入:
{3, 2, 0, -4}, 1
返回值:
2
说明:
- 链表{3, 2, 0, -4}有一个环,环的入口节点是值为2的节点。
示例 2:
输入:
{1}, -1
返回值:
NULL
说明:
- 链表{1}没有环,返回
NULL。
示例 3:
输入:
{-1, -7, 7, -4, 19, 6, -9, -5, -2, -5}, 6
返回值:
6
说明:
- 链表有环,环的入口节点是值为6的节点。
代码实现
/*** struct ListNode {* int val;* struct ListNode *next;* };*//*** 找到链表中环的入口节点* * @param pHead ListNode类 链表头结点* @return ListNode类 如果链表有环,返回环的入口节点,否则返回NULL*/
struct ListNode* EntryNodeOfLoop(struct ListNode* pHead) {// 判断链表是否为空或只有一个节点,若是则不存在环if (pHead == NULL || pHead->next == NULL) return NULL;struct ListNode* fast = pHead->next->next; // 快指针初始为第二个节点struct ListNode* slow = pHead->next; // 慢指针初始为第一个节点// 快慢指针相遇判断是否有环while (fast != slow) {// 如果快指针到达链表末尾,则没有环if (fast == NULL || fast->next == NULL)return NULL;fast = fast->next->next; // 快指针每次移动两步slow = slow->next; // 慢指针每次移动一步}// 如果有环,重新初始化慢指针到链表头,从而找到环的入口slow = pHead;while (fast != slow) {fast = fast->next; // 快指针每次移动一步slow = slow->next; // 慢指针每次移动一步}// 快慢指针相遇时即为环的入口节点return slow;
}
思路解析
-
快慢指针法判断是否有环:
- 初始化两个指针
fast和slow,其中fast指针每次移动两步,slow指针每次移动一步。 - 如果链表存在环,快慢指针最终会在环内某个节点相遇;如果链表没有环,快指针会到达链表的尾部(即
fast == NULL或fast->next == NULL)。
- 初始化两个指针
-
找到环的入口节点:
- 当快慢指针相遇时,慢指针重新回到链表头节点,快指针保持在相遇节点处。
- 然后,两个指针都每次移动一步,最终会在环的入口节点相遇。
-
时间复杂度:
- 快慢指针第一次相遇的时间复杂度为 O ( n ) O(n) O(n),找到环的入口节点的时间复杂度也是 O ( n ) O(n) O(n),所以总时间复杂度为 O ( n ) O(n) O(n)。
-
空间复杂度:
- 由于只使用了常数空间,因此空间复杂度为 O ( 1 ) O(1) O(1)。
注意事项:
- 需要确保链表为空或只有一个节点时,返回
NULL。 - 快指针每次移动两步,慢指针每次移动一步,可以有效地判断环并找到环的入口。
相关文章:
每日一题:链表中环的入口结点
文章目录 判断链表环的入口节点描述数据范围:复杂度要求:输入输出 示例代码实现思路解析注意事项: 判断链表环的入口节点 描述 给定一个链表,判断该链表是否存在环。如果存在环,返回环的入口节点;如果不存…...
k8s里面etcd的作用
etcd 是 Kubernetes 集群中一个至关重要的组件,它是一个开源的分布式键值存储系统,主要用于存储和管理 Kubernetes 集群的配置和状态信息。以下是 etcd 在 Kubernetes 中的具体作用和功能: ### 1. **集群状态存储** etcd 是 Kubernetes 集群的持久化存储后端,负责存储和管…...
使用 uniapp 开发微信小程序遇到的坑
0. 每次修改代码时,都会触发微信开发工具重新编译 终极大坑,暂未找到解决方案 1. input 无法聚焦问题 问题:在小程序开发工具中,input 会突然无法聚焦,重启也不行。但是真机调试可以正常聚焦。 解决办法:…...
AlphaPi相关硬件驱动提取
初涉硬件编程,在咸鱼上搞了几块AlphaPi和microbit的板鼓捣了一下,alphapi生态不完善,网上又无任何文档,搞封闭,可玩性实在有限,但貌似相关扩展板是可以插microbit的,于是想把这些扩展版用microb…...
【学习笔记】数据结构(十)
内部排序 文章目录 内部排序10.1 概述10.2 插入排序10.2.1 直接插入排序10.2.2 其他插入排序10.2.2.1 折半插入排序(Binary Insertion Sort)10.2.2.2 2-路插入排序(Two-Way Insertion Sort)10.2.2.3 表插入排序(Table Insertion Sort…...
Unity中 Xlua使用整理(二)
1.Xlua的配置应用 xLua所有的配置都支持三种方式:打标签;静态列表;动态列表。配置要求: 列表方式均必须是static的字段/属性 列表方式均必须放到一个static类 建议不用标签方式 建议列表方式配置放Editor目录(如果是H…...
刚体变换矩阵的逆
刚体运动中的变换矩阵为: 求得变换矩阵的逆矩阵为: opencv应用 cv::Mat R; cv::Mat t;R.t(), -R.t()*t...
高等数学-----极限、函数、连续
考研数学笔记...
ubuntu 创建服务、查看服务日志
1. 在 /etc/systemd/system/ 下创建文件,名称为 xxx.service [Unit] DescriptionYour Service Description Afternetwork.target[Service] Typesimple ExecStart/path/to/your/service/executable Restarton-failure[Install] WantedBymulti-user.target2. 配置服务…...
如何监控批量写入的性能瓶颈?
监控批量写入的性能瓶颈是优化数据写入过程的关键步骤。通过系统化的监控和分析,可以识别出影响性能的具体环节,并采取相应的优化措施。以下是详细的监控方法和步骤: ### 1. **数据库性能监控** #### a. **数据库内置监控工具** 大多数数据库系统都提供了内置的性能监控工…...
Ubuntu挂载Windows 磁盘,双系统
首先我们需要在终端输入这个命令,来查看磁盘分配情况 lsblk -f 找到需要挂载的磁盘,检查其类型( 我的/dev/nvme2n1p1类型是ntfs,名字叫3500winData) 然后新建一个挂载磁盘的目录,我的是/media/zeqi/3500wi…...
【雷达】雷达的分类
文章目录 前言类别性质主要雷达分系统及其现代技术发展国外发展 前言 前言 类别 性质 按作用分类 军用雷达:(按载体)地面雷达、舰载雷达、机载雷达、星载雷达、 艇载雷达、弹载雷达 民用雷达:交通管制雷达、港口管制雷达、气象雷…...
Word中所有的通配符使用方式[Word如何批量删除中文标点符号,英文标点符号,英文字母符号,数字符号,中文汉字符号]
Word中所有的通配符使用方式 概念讲解通配符一览表详细介绍通配符的使用使用通配符搜索简洁通配符链接操作演示链接 概念讲解 Word中的通配符是用在查找和替换中的正则表达式。通配符可以实现高级的查找替换,快速整理和排版文档。常用的通配符包括: “*…...
OpenCV相机标定与3D重建(43)用于计算矫正和重映射的变换函数initUndistortRectifyMap()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 计算畸变矫正和校正变换映射。 该函数计算联合的畸变矫正和校正变换,并以 remap 所需的地图形式表示结果。矫正后的图像看起来像是原…...
ansible-api分析(Inventory)
一. 简述: 通过ansible 实现系统初始化功能, 为和平台嵌入, 需要通过ansible的api进行功能实现。 准确来说,ansible并没有纯粹的外部接入api功能, 只是官方提供了原生类,用于继承接入,从而实现a…...
使用FDBatchMove的几个问题总结
FDBatchMove的使用,搞了好久,今天终于解决了自己的几个问题,网上很少例子,记录一下,仅做参考。 1、使用firedac导入excel表,需要access database驱动,不要使用2007,一定要使用2010&…...
人工智能前沿探讨:从Transformer架构到机器意识与迁移学习的应用
Transformer架构可能为理解人脑的运作提供新的视角 Transformer架构与人脑的相似之处是一个颇受关注的话题。虽然人脑和Transformer架构之间有许多差异,但也有一些相似之处,值得我们探讨。 相似之处: 注意力机制: Transformer架构中的注意力机制是它的…...
Flutter Web 中文字体显示异常问题
flutter web 在中文使用粗体的时候发现了两个问题 一个字的笔画颜色不相同带有 ‘口’的字 这个口由于太粗出现了实体闭合的情况 解决方案 替换字体 对于这个问题解决的办法只有替换中文字体库,因为只有粗体才有问题,所以只需要添加粗体字体即可。我…...
【Nginx】设置https和http同时使用同一个端口访问
以下是一个同时使用 HTTP 和 HTTPS 并通过 8070 端口的配置示例: server {listen 8070;server_name your_domain.com;location / {root /var/www/html;index index.html;} }server {listen 8070 ssl;server_name your_domain.com;# SSL 证书和私钥的路径ssl_certif…...
clickhouse query_log 常用查询语句
1、查询一段时间耗时超过3秒的语句。 SELECT* FROMsystem.query_log WHEREquery_duration_ms > 30000AND event_time > 2024-12-31 15:50:00 AND event_time < 2024-12-31 17:50:00 ORDER BYevent_time desc;2、查询一段时间报错的语句 SELECT* FROMsystem.query_lo…...
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?
Redis 的发布订阅(Pub/Sub)模式与专业的 MQ(Message Queue)如 Kafka、RabbitMQ 进行比较,核心的权衡点在于:简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
