【算法|链表】环形链表Ⅱ

news2025/1/13 19:46:11

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

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

不允许修改 链表。

示例 1:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。

思路

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Java版本

public class Solution {
    public ListNode detectCycle(ListNode head) {
        if(head == null) return null;
        ListNode fast = head;
        ListNode slow = head;
        while(fast != null && fast.next != null){
            fast = fast.next.next;
            slow = slow.next;
            if(fast == slow) {break;}
        } 
        if(fast == null || fast.next == null){
            return null;
        }
        fast = head;
        while(fast != slow){
            fast = fast.next;
            slow = slow.next;
        }
        return fast;
        
    }
}
public class Solution {
    public ListNode detectCycle(ListNode head) {
        ListNode fast = head;
        ListNode slow = head;
        while(fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
            if(slow == fast){
                ListNode index1 = fast;
                ListNode index2 = head;
                while(index1 != index2){
                    index1 = index1.next;
                    index2 = index2.next;
                }
                return index2;
            }
        }
        return null;
    }
}

C++版本

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode* fast = head;
        ListNode* slow = head;
        while(fast != NULL && fast->next != NULL){
            slow = slow->next;
            fast = fast->next->next;
            //有环
            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/1016726.html

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

相关文章

原创 VTK 基础入门 ( 一 ) 贴纹理

纹理 这个示例先读入一幅JPEG的二维纹理图;然后定义一个纹理类vtkTexture对象,接着把读入的NPG图像输入到vtkTexture 里, 作为它即将“贴”到平面上的一个纹理图;再定义一个vtkPlaneSource对象,类vtkPlaneSource 可以生成一个…

Pytorch学习:torch.max(input,dim,keepdim=False)

文章目录 torch.max()dimkeepdimdim0dim1 out:返回命名元组 (values, indices) torch.max() torch.max(input) → Tensor:返回 input 张量中所有元素的最大值。 注意输入的必须是张量形式,输出的也为张量形式 当输入为tuple类型时&#xf…

Attention is all you need 论文笔记

该论文引入Transformer,主要核心是自注意力机制,自注意力(Self-Attention)机制是一种可以考虑输入序列中所有位置信息的机制。 RNN介绍 引入RNN为了更好的处理序列信息,比如我 吃 苹果,前后的输入之间是有…

计算机组成原理之计算机系统概论、计算机的发展史、系统总线,三章开篇讲

第一章-计算机系统概论 1计算机系统简介 现代计算机的多态性 把感应器嵌入和装备到电网、铁道、桥梁、隧道、公路、建筑、供水系统、大坝、油气管道等各种物体中,并且被普遍连接,形成“物联网”,然后将“物联网”与现有的网络整合起来&…

无涯教程-JavaScript - ACOT函数

描述 ACOT函数以0至π之间的弧度(以弧度为单位)返回数的反正切或反余切的主值。 语法 ACOT (number)争论 Argument描述Required/OptionalNumberNumber is the cotangent of the angle you want. This must be a real number.Required Notes 要将输出从弧度转换为度, 使用D…

【计算机视觉 | 目标检测】YOLO-NAS的介绍以及如何使用?(含源代码)

文章目录 一、介绍1.1 亮点1.2 方案简介1.3 训练简介 二、使用案例 一、介绍 Github 仓库: https://github.com/Deci-AI/super-gradients/blob/master/YOLONAS.md1.1 亮点 参考QARepVGG,该方案引入了QSP与QCI模块以同时利用重参数与8-bit量化的优化&a…

C语言练习题解析(2)

💓博客主页:江池俊的博客⏩收录专栏:C语言刷题专栏👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐ 文…

d3dx9_43.dll文件缺失的修复方法有哪些?4个方法快速修复d3dx9_43.dll

最近有很多小伙伴反映说他的电脑经常出现一个问题,那就是d3dx9_43.dll文件缺失了,然后一些程序都打不开,他们都是一脸懵逼,不知道怎么去处理这个问题,今天小编就要来给大家详细的说说这方面,d3dx9_43.dll文…

小谈设计模式(3)—策略模式

小谈设计模式(3)—策略模式 专栏介绍专栏地址专栏介绍 策略模式主要角色环境(Context)抽象策略(Strategy)具体策略(Concrete Strategy)角色总结 核心思想封装算法定义抽象策略使用环…

Minio入门系列【3】MinIO Client使用详解

1 简介 简称mc,是minio服务器的客户端,对ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案,它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4&…

nginx知识点详解:反向代理+负载均衡+动静分离+高可用集群

一、nginx基本概念 1. nginx是什么,做什么事情? Nginx是一个高性能的HTTP和反向代理服务器,特点是占有内存少,并发能力强。Nginx转为性能优化而开发,能经受高负载考验。支持热部署,启动容易,运…

(三十二)大数据实战——Maxwell安装部署及其应用案例实战

前言 Maxwell是一个开源的MySQL数据库binlog解析工具,用于将MySQL数据库的binlog转换成易于消费的JSON格式,并通过Kafka、RabbitMQ、Kinesis 等消息队列或直接写入文件等方式将其输出。本节内容主要介绍如何安装部署Maxwell以及如何使用Maxwell完成数据…

通用商城项目(下)

记录一些踩坑的地方,以及理顺一些思路。 通过管理系统页面,完成商品属性分组和商品属性(基本属性)关联维护 属性表 与 属性组表 的功能完善:显示属性组与属性表的一对多关系 前端 1. 引入组件,是否显示使…

qgroundcontrol源码Andriod平台编译

1.下载QGC(qgroundcontrol)源码: 2.安装Qt5.15.2 3.配置Android平台工具集: 4.打开QGC项目文件: 5.安卓工程输出路径: 6.创建签名文件: 7.右击工程,然后选择Build 8.修改生成工程gradle.properties(Global Properties)增加下面内容: org.gradle.jvmargs-Xmx1536M --add-export…

UGNX配置许可服务器

UG客户端配置许可服务器,第一次安装完成或修改成其他许可服务器  打开菜单栏,找到Siemens NX目录->许可证工具->许可工具  切换到环境设置,设置许可服务器,点击编辑,弹出编辑框输入端口服务器IP。  输入…

[字符串和内存函数]strcat和strncat的区别

CPlus中对strcat的介绍 /* strcat example */ #include <stdio.h> #include <string.h>int main () {char str[80];strcpy (str,"these ");strcat (str,"strings ");strcat (str,"are ");strcat (str,"concatenated.");p…

进程间通信(IPC)的方法:共享内存

共享内存(shared memory)是可用IPC技术中最快的一种。一旦内存被映射到共享内存区域的进程的地址空间中&#xff0c;在进程之间传递数据时就不会发生内核(kernel)参与。然而&#xff0c;在共享内存区域存储和提取数据时&#xff0c;进程之间需要某些形式的同步(例如互斥锁、条件…

Spring Boot的魔法:构建高效Java应用的秘诀

文章目录 1. 自动配置&#xff08;Auto-Configuration&#xff09;2. 起步依赖&#xff08;Starter Dependencies&#xff09;3. 内嵌Web服务器&#xff08;Embedded Web Server&#xff09;4. 外部化配置&#xff08;Externalized Configuration&#xff09;5. Spring Boot Ac…

每日一题 213. 打家劫舍 II

难度&#xff1a;中等 思路&#xff1a; 首先不看成环&#xff0c;只是当作列表&#xff0c;那么对于第 i 间房&#xff0c;到 i 为止的最高偷窃金额为 f(i) max(f(i - 1), f(i - 2) nums[i])分析递推关系第一点&#xff0c;不管 i - 2 处的房子是否偷窃&#xff0c;i 处的…

【基础篇】ClickHouse 表结构设计

文章目录 1. ClickHouse 表结构设计1. 表的创建与标准SQL的差异1. 创建普通表2. 创建物化视图3. 创建分布式表 2. 表引擎1. MergeTree:2. Log:3. Memory:4. Distributed:5. Kafka:6. MaterializedView:7. File和URL: 3. MergeTree 家族3.1. MergeTree:3.2. ReplacingMergeTree:…