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

每日一题:链表中环的入口结点

文章目录

  • 判断链表环的入口节点
    • 描述
      • 数据范围:
      • 复杂度要求:
      • 输入
      • 输出
    • 示例
    • 代码实现
    • 思路解析
    • 注意事项:

判断链表环的入口节点

在这里插入图片描述

描述

给定一个链表,判断该链表是否存在环。如果存在环,返回环的入口节点;如果不存在环,返回NULL

数据范围:

  • 链表长度 n n n 0 ≤ n ≤ 10000 0 \leq n \leq 10000 0n10000
  • 链表中任意节点的值满足 ∣ v a l ∣ ≤ 100000 |val| \leq 100000 val100000

复杂度要求:

  • 空间复杂度: 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;
}

思路解析

  1. 快慢指针法判断是否有环

    • 初始化两个指针 fastslow,其中 fast 指针每次移动两步,slow 指针每次移动一步。
    • 如果链表存在环,快慢指针最终会在环内某个节点相遇;如果链表没有环,快指针会到达链表的尾部(即 fast == NULLfast->next == NULL)。
  2. 找到环的入口节点

    • 当快慢指针相遇时,慢指针重新回到链表头节点,快指针保持在相遇节点处。
    • 然后,两个指针都每次移动一步,最终会在环的入口节点相遇。
  3. 时间复杂度

    • 快慢指针第一次相遇的时间复杂度为 O ( n ) O(n) O(n),找到环的入口节点的时间复杂度也是 O ( n ) O(n) O(n),所以总时间复杂度为 O ( n ) O(n) O(n)
  4. 空间复杂度

    • 由于只使用了常数空间,因此空间复杂度为 O ( 1 ) O(1) O(1)

注意事项:

  • 需要确保链表为空或只有一个节点时,返回 NULL
  • 快指针每次移动两步,慢指针每次移动一步,可以有效地判断环并找到环的入口。

相关文章:

每日一题:链表中环的入口结点

文章目录 判断链表环的入口节点描述数据范围:复杂度要求:输入输出 示例代码实现思路解析注意事项: 判断链表环的入口节点 描述 给定一个链表,判断该链表是否存在环。如果存在环,返回环的入口节点;如果不存…...

k8s里面etcd的作用

etcd 是 Kubernetes 集群中一个至关重要的组件,它是一个开源的分布式键值存储系统,主要用于存储和管理 Kubernetes 集群的配置和状态信息。以下是 etcd 在 Kubernetes 中的具体作用和功能: ### 1. **集群状态存储** etcd 是 Kubernetes 集群的持久化存储后端,负责存储和管…...

使用 uniapp 开发微信小程序遇到的坑

0. 每次修改代码时,都会触发微信开发工具重新编译 终极大坑,暂未找到解决方案 1. input 无法聚焦问题 问题:在小程序开发工具中,input 会突然无法聚焦,重启也不行。但是真机调试可以正常聚焦。 解决办法&#xff1a…...

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&#xf…...

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…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

企业如何增强终端安全?

在数字化转型加速的今天&#xff0c;企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机&#xff0c;到工厂里的物联网设备、智能传感器&#xff0c;这些终端构成了企业与外部世界连接的 “神经末梢”。然而&#xff0c;随着远程办公的常态化和设备接入的爆炸式…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点&#xff1a; 多级缓存&#xff0c;先查本地缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

MySQL 8.0 事务全面讲解

以下是一个结合两次回答的 MySQL 8.0 事务全面讲解&#xff0c;涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容&#xff0c;并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念&#xff08;ACID&#xff09; 事务是…...

【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案

目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后&#xff0c;迭代器会失效&#xff0c;因为顺序迭代器在内存中是连续存储的&#xff0c;元素删除后&#xff0c;后续元素会前移。 但一些场景中&#xff0c;我们又需要在执行删除操作…...

uniapp 实现腾讯云IM群文件上传下载功能

UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中&#xff0c;群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS&#xff0c;在uniapp中实现&#xff1a; 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...