26 环形链表II

news2024/10/2 8:27:36

环形链表 II

    • 题解1 哈希表
    • 题解2 双指针

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

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

不允许修改 链表。
在这里插入图片描述
提示:

  • 链表中节点的数目范围在范围 [ 0 , 1 0 4 ] [0, 10^4] [0,104]
  • − 1 0 5 -10^5 105 <= Node.val <= 1 0 5 10^5 105
  • pos 的值为 -1 或者链表中的一个有效索引

进阶:你是否可以使用 O(1) 空间解决此题?

题解1 哈希表

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        unordered_set<ListNode*> kkset;
        while(head){
            if(kkset.count(head))
            // 返回值有变化
                return head;
            kkset.insert(head);
            head = head->next;
        }
        return NULL;
    }
};

在这里插入图片描述

题解2 双指针

class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode* fast, *slow;
        fast = slow = head;
        while(fast && fast->next){
            fast = fast->next->next;
            slow = slow->next;
            if(fast == slow){
            // 环前长度a 相遇距环点b 差c走完一环
            // 2*(a+b) = a + n(b+c) +b
            // a = (n−1)b+nc = (n−1)(b+c)+c
            // slow差c步到入环点
            // a + a + b = (2n-1)(b+c) + c
            // 所以slow跟着head走a步一定会到入环点
                while(head != slow){
                    head = head->next;
                    slow = slow->next;
                }
                return head;
            }
                
        }
        return NULL;
    }
};

在这里插入图片描述

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

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

相关文章

pgzrun 拼图游戏制作过程详解(10)

10. 拼图游戏继续升级——多关卡拼图 初始化列表Photos用来储存拼图文件名&#xff0c;Photo_ID用来统计当下是第几张拼图&#xff0c;Squares储存当下拼图的24张小拼图的文件名&#xff0c;Gird储存当下窗口上显示的24个小拼图及坐标。 Photos["girl_","boy_…

“顽固”——C语言用栈实现队列

解题图解&#xff1a; 1、 先用stack1存储push来的数据 2、每当要pop数据时&#xff0c;从stack2中取&#xff0c;如果 stack2为空&#xff0c;就先从stack1中“倒”数据到stack2。 这就是用栈实现队列的基本操作 这道题看起来比较容易&#xff0c;但是&#xff01;如果你用C语…

jupyter notebook插件安装及插件推荐

安装插件 安装插件选择的工具栏 pip install jupyter_contrib_nbextensions将插件工具栏添加到jupyter notebook页面 jupyter contrib nbextension installdisable configuration for nbextensions without explicit compatibility (they may break your notebook environme…

《Kubernetes部署篇:Ubuntu20.04基于containerd部署kubernetes1.25.14集群(多主多从)》

一、架构图 如下图所示: 二、环境信息 1、资源下载基于containerd部署容器版kubernetes1.25.14集群资源合集 2、部署规划主机名K8S版本系统版本内核版本IP地址备注k8s-master-121.25.14Ubuntu 20.04.5 LTS5.15.0-69-generic192.168.1.12master节点 + etcd节点k8s-master-131.…

【超实用】2023年,学生上班族如何简单快速,低成本的搭建一个博客网站

文章目录 前言实操环节香港虚拟机购买博客搭建ssl证书配置备份设置 总结 前言 因为工作和生活的需要&#xff0c;我一直有博客的搭建需求。我将总结下来&#xff0c;为读者提供参考。  起初&#xff0c;我采用的是香港云虚拟主机&#xff0c;这种虚拟机极其便宜&#xff08;一…

java接入烽火科技拾音器详细步骤

1 背景 项目中需要拾音器去采集音频数据并保存成mp3这种音频文件&#xff0c;以便以后如果有纠纷后可以作为证据去减少纠纷&#xff0c;于是采购了一台烽火科技的拾音器设备&#xff0c;包括一个采音器及一个处理终端。 2 接线 设备拿过来第一件事是接线&#xff0c;通电&…

WampServer下载安装+cpolar内网穿透实现公网访问本地服务【内网穿透】

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…

如何将视频进行分割?这几种分割方法了解一下

当我们将视频分成几段后&#xff0c;可以更好地组织和管理不同的片段&#xff0c;方便后续查找和使用。我们可以根据需要调整视频的长度和内容&#xff0c;满足不同的观看需求。此外&#xff0c;分段视频可以更好地适应不同的观看场景&#xff0c;可以更方便地分享和传播&#…

RocketMQ 源码分析——Consumer

文章目录 消费者启动流程消费者模式集群消费广播消费 Consumer负载均衡集群模式广播模式 并发消费流程获取topic配置信息获取Group的ConsumerList获取Queue的消费Offset拉取Queue的消息更新Queue的消费Offset 顺序消费流程消费存在的问题消费卡死启动之后较长时间才消费 消费者…

操作系统(5-7分)

内容概述 进程管理 进程的状态 前驱图 同步和互斥 PV操作&#xff08;难点&#xff09; PV操作由P操作原语和V操作原语组成&#xff08;原语是不可中断的过程&#xff09;&#xff0c;对信号量进行操作&#xff0c;具体定义如下&#xff1a; P&#xff08;S&#xff09;&#…

渗透测试信息收集方法和工具分享

文章目录 一、域名收集1.OneForAll2.子域名挖掘机3.subdomainsBurte4.ssl证书查询 二、获取真实ip1.17CE2.站长之家ping检测3.如何寻找真实IP4.纯真ip数据库工具5.c段&#xff0c;旁站查询 三、端口扫描1.端口扫描站长工具2.masscan(全端口扫描)nmap扫描3.scanport4.端口表5.利…

API(八)cosocket常用SDK

一 同步且非阻塞的底层SDK&#xff1a;cosocket 说明&#xff1a; 本篇章只是对cosocket常用话API的汇总,并没有实际案例加以辅证场景&#xff1a; 许多单机版的中间件都是基于cosocket做的二次开发 OpenResty 的核心和精髓 cosocket ① coscoket常用的指令 个人建议&am…

java jax-ws webservice编程,入门教程,包含服务端与客户端,编码

java jax-ws webservice 就是服务端程序提供接口,客户端,通过服务端提供的jar包(或者打包的类文件),通过jax-ws直接调用服务端暴露的接口来进行操作. 服务端 共三个文件 接口 package com.jaxwsdemo.serveice;import javax.jws.WebMethod; import javax.jws.WebParam; impo…

【java基础】Java常见的创建对象方式

背景&#xff1a; 对于好多程序员来说&#xff0c;你问他&#xff0c;如何创建对象&#xff0c;他可能就只知道new个对象不就行了&#xff0c;但是当我们需要看一些框架的源码的时候&#xff0c;经常发现他们不是这样创建对象&#xff0c;然后回过头来&#xff0c;我们就得补充…

2023.9.18 网络层 IP 协议详解

目录 IP协议 IPv4 32位 源IP 地址 / 32位 目的IP 地址 IP 地址管理 特殊 IP 路由选择 IP协议 IPv4 32位 源IP 地址 / 32位 目的IP 地址 基本知识&#xff1a; 在 IP 报头中一般表示为 32位 二进制整数日常生活中的 IP 一般将 32位 二进制整数&#xff0c;也就是 4字节 的二…

Vue的模板语法(下)

一.事件处理 事件修饰符 Vue通过由点(.)表示的指令后缀来调用修饰符&#xff0c; .stop&#xff0c; .prevent&#xff0c;.capture&#xff0c;.self&#xff0c;.once .stop&#xff1a;阻止事件冒泡。当一个元素触发了事件&#xff0c;并且该元素包含嵌套的父元素时&#…

【大虾送书第十期】从不了解用户画像,到用画像数据赋能业务看这一本书就够了

目录 &#x1f36d;写在前面 &#x1f36d;内容简介 &#x1f36d;设计图和原型图 &#x1f36d;参考目录 &#x1f36d;文末福利 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;免费送书活动专栏地址 写在前面 在大数据时代&#xff0…

小程序游戏开发和app游戏开发有什么不同呢?

小程序游戏开发和App游戏开发有一些重要的区别&#xff0c;这些区别涉及到平台、技术、发布和用户体验等方面。以下是它们之间的主要不同之处&#xff1a; 平台&#xff1a; 小程序游戏开发是为特定的小程序平台设计的&#xff0c;如微信小程序、支付宝小程序等。这些小程序通常…

Android使用Chrome浏览器进行抓包

Android使用Chrome浏览器进行抓包 这里记录一个用Android真机抓包的方法。 打开Chrome浏览器&#xff0c;打开网址&#xff1a;chrome://inspect/#devices 找到对应 App 点击 inspect&#xff0c;进行网络请求&#xff0c;就能看到抓包的数据啦 数据线连上android设备&#x…

Mybatis框架学习

什么是mybatis&#xff1f; mybatis是一款用于持久层的、轻量级的半自动化ORM框架&#xff0c;封装了所有jdbc操作以及设置查询参数和获取结果集的操作&#xff0c;支持自定义sql、存储过程和高级映射 mybatis用来干什么&#xff1f; 用于处理java和数据库的交互 使用mybat…