LeetCode142:环形链表

news2024/9/20 8:09:37

题目描述
给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

在这里插入图片描述
在这里插入图片描述
解题思想
我们遍历链表中的每个节点,并将它记录下来;一旦遇到了此前遍历过的节点,就可以判定链表中存在环。借助哈希表可以很方便地实现。

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        unordered_set<ListNode*> visited;
        while(head){
            if(visited.count(head))
                return head;
            visited.insert(head);
            head=head->next;
        }
        return NULL;
    }
};

快慢指针
判断是否有环:
可以使用快慢指针法,分别定义 fast 和 slow 指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。

为什么fast 走两个节点,slow走一个节点,有环的话,一定会在环内相遇呢,而不是永远的错开呢

首先第一点:fast指针一定先进入环中,如果fast指针和slow指针相遇的话,一定是在环中相遇,这是毋庸置疑的。

如果有环,如何找到这个环的入口
在这里插入图片描述
在这里插入图片描述

class Solution2 {
public:
    ListNode* detectCycle(ListNode* head) {
        ListNode* fast=head, * slow=head;
        while (fast != NULL && fast->next != NULL) {
            slow = slow->next;
            fast = fast->next->next;
            /// 快慢指针相遇,此时从head 和 相遇点,同时查找直至相遇
            if (slow == fast) {
                ListNode* index1 = fast;
                ListNode* index2 = head;
                while (index1 != index2) {
                    index1 = index1->next;
                    index2 = index2->next;
                }
                return index1;
            }
        }
        return NULL;
    }
};

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

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

相关文章

TSINGSEE青犀智能分析网关V4有限空间作业监护AI算法介绍及应用

在现代工业生产中&#xff0c;有限空间作业是一种常见的生产方式。然而&#xff0c;这种作业环境由于空间有限、出入口较为狭窄、人员操作复杂等因素&#xff0c;往往存在着较高的安全风险&#xff0c;因为自然通风不良&#xff0c;作业人员不能长时间在内工作。为了保障作业人…

linux环境基础开发工具2(gcc/g++ 、 make/ Makefile)

目录 Linux编译器-gcc/g使用 Linux项目自动化构建工具-make/Makefile Linux编译器-gcc/g使用 1. 背景知识 1.2 gcc/g -v 查看当前服务器的编译器版本 1.3 安装gcc / g sudo yum install -y gcc-c 1.4 预处理 -> 编译 -> 汇编 -> 链接 [wxqVM-4-9-centos Test]$ to…

如何在Windows搭建WebDav服务,并外网可访问

目录 1. 安装IIS必要WebDav组件 2. 客户端测试 3. 使用cpolar内网穿透&#xff0c;将WebDav服务暴露在公网 3.1 打开Web-UI管理界面 3.2 创建隧道 3.3 查看在线隧道列表 4. 公网远程访问 4.1 浏览器访问测试 4.2 映射本地盘符访问 4.3 安装Raidrive客户端 总结&…

Could not use APOC procedures

报错内容&#xff1a; Traceback (most recent call last):File "/root/anaconda3/envs/sakura/lib/python3.9/site-packages/langchain_community/graphs/neo4j_graph.py", line 205, in __init__self.refresh_schema()File "/root/anaconda3/envs/sakura/lib…

基于ACM32 MCU的两轮车充电桩方案介绍,有利于打造高效安全的电池管理

随着城市化进程的加快、人们生活水平的提高和节能环保理念的普及&#xff0c;越来越多的人选择了电动车作为代步工具&#xff0c;而两轮电动车的出行半径较短&#xff0c;需要频繁充电&#xff0c;因此在城市中设置两轮车充电桩就非常有必要了。城市中的充电桩不仅能解决两轮车…

C语言--sprintf()函数的用法

一.sprintf()语法 sprintf&#xff08;&#xff09; 是一个 C 语言中的函数&#xff0c;用于将格式化的数据写入一个字符串中。它的用法与 printf() 函数相似&#xff0c;printf&#xff08;&#xff09;函数是将内容输出到屏幕上&#xff0c;而sprintf()函数是将格式化的内容输…

基于大模型和向量数据库的 RAG 示例

1 RAG 介绍 RAG是一种先进的自然语言处理方法&#xff0c;它结合了信息检索和文本生成技术&#xff0c;用于提高问答系统、聊天机器人等应用的性能。 2 RAG 的工作流程 文档加载&#xff08;Document Loading&#xff09; 从各种来源加载大量文档数据。这些文档…

基于微信小程序的校园跑腿小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

SpringBoot(接受参数相关注解)

文章目录 1.基本介绍2.PathVariable 路径参数获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 3.RequestHeader 请求头获取信息1.代码实例1.index.html2.ParameterController.java3.测试 2.细节说明 4.RequestParameter 请求获取参数信息1.代码实例…

08-java基础-锁之AQSReentrantLockBlockingQueueCountDownLatchSemapho

文章目录 0&#xff1a;AQS简介-常见面试题AQS具备特性state表示资源的可用状态AQS定义两种资源共享方式AQS定义两种队列自定义同步器实现时主要实现以下几种方法&#xff1a;同步等待队列条件等待队列 1&#xff1a;AQS应用之ReentrantLockReentrantLock如何实现synchronized不…

如何选购自助咖啡机?这三点是关键!

在竞争激烈的咖啡市场中&#xff0c;既有知名咖啡连锁品牌&#xff0c;也有众多咖啡馆和小型连锁店&#xff0c;无人智能饮品机要想在激烈的竞争中脱颖而出&#xff0c;发挥自身优势&#xff1a;快速便捷是关键&#xff0c;同时好的口感才能留客&#xff0c;因此饮品机的选购成…

MES管理系统中电子看板都有哪些类型?

随着工业信息化和智能制造的不断发展&#xff0c;MES管理系统已经成为现代制造业不可或缺的重要工具。MES管理系统通过集成和优化生产过程中的各个环节&#xff0c;实现对生产过程的实时监控、调度和管理&#xff0c;提高生产效率和质量。 在生产制造过程中&#xff0c;看板管…

第七届国际通信与网络工程会议(ICCNE 2024)即将召开!

2024年第七届国际通信与网络工程会议&#xff08;ICCNE 2024&#xff09;将于7月26-28日在越南岘港召开。本次会议由维新大学主办&#xff0c;岘港大学、胡志明市科技大学协办。ICCNE 2024旨在为来自行业和学术界的研究人员、从业者和专业人士提供论坛&#xff0c;分享其最新研…

vid2vid(Video-to-Video Synthesis)论文详读和理解

论文&#xff1a;https://arxiv.org/abs/1808.06601 代码&#xff1a;https://github.com/NVIDIA/vid2vid

Linux系统部署Swagger Editor结合内网穿透实现公网管理本地接口文档

文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagger Editor2. Linux安装Cpolar3. 配置Swagger Editor公网地址4. 远程访问Swagger Editor5. 固定Swagger Editor公网地址 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xf…

Win7安装 .NET Framework 4.6.2 产生阻滞的问题

如图&#xff1a; 解决方案&#xff1a;安装补丁 windows6.1-KB976932-X64 补丁下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1_pIflWRKriAheAweJVkXFQ 提取码&#xff1a;6a1q

如何在Linux部署Docker Registry本地镜像仓库并实现无公网IP远程连接

文章目录 1. 部署Docker Registry2. 本地测试推送镜像3. Linux 安装cpolar4. 配置Docker Registry公网访问地址5. 公网远程推送Docker Registry6. 固定Docker Registry公网地址 Docker Registry 本地镜像仓库,简单几步结合cpolar内网穿透工具实现远程pull or push (拉取和推送)…

HTML静态网页成品作业(HTML+CSS)——电影加勒比海盗介绍设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

供应IMX290LQR-C芯片现货

长期供应各品牌芯片现货&#xff0c;SONY索尼SONY索尼CMOS/CCD芯片全系列全新现货优势出&#xff1a; IMX225LQR-C IMX415-AAQR-C IMX290LQR-C imx273llr-C IMX397CLN-C IMX637-AAMJ-C IMX647-AAMJ-C IMX991-A***-C IMX991-AABJ-C IMX287LLR-C IMX287LQR-C IMX297L…

【李沐论文精读】CLIP改进工作串讲精读

参考&#xff1a;CLIP改进工作串讲&#xff08;上&#xff09;、CLIP改进工作串讲&#xff08;下&#xff09;、李沐精读系列、CLIP 改进工作串讲&#xff08;上&#xff09;笔记 由于是论文串讲&#xff0c;所以每个链接放在每一个小节里。 CLIP的应用如下&#xff1a; 回顾&a…