【LeetCode】环形链表I 环形链表II

 一、环形链表I 

题目 

思路 

该题使用快慢指针 slow、 fast 

slow 走一步 ,fast 走两步 

当fast 走到空  或者 fast的下一个结点为空, 则无环

fast若追上slow , 则有环

结论证明

该思路默认了 :

若存在环形链表 , 无论两个指针的步差是多少,快指针 一定可以追上 慢指针

下面我们对该结论用数学归纳法进行证明:从简单的情况推广到更普遍的情况

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    struct ListNode* slow = head, *fast = head;
    while(fast && fast->next)
    {
        slow = slow -> next;
        fast = fast -> next ->next;
        if(slow == fast)
        {
            return true;
        }
    }
    return false;
}

二、环形链表II 

题目

相比上一题目 ,该题需要我们求入口点。

思路一

结论: 一个指针从链表头节点走 另一个指针从相遇点走  两个指针会在 入口点相遇

结论证明

 

代码

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* detectCycle(struct ListNode* head) {
    struct ListNode *slow, *fast;
    slow = fast = head;
    while (fast && fast->next) {
        slow = slow->next;
        fast = fast->next->next;
        // 找相遇点
        if (slow == fast) {
            struct ListNode* meet = slow;
            while (head != meet) {
                meet = meet->next;
                head = head->next;
            }
            return meet;
        }
    }
    return NULL;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件夹批量重命名:文件夹名称编号实战,快速实现文件分类与整理

随着电脑中存储的文件日益增多,如何有效地管理和组织这些文件成为了许多用户面临的一大挑战。文件夹批量重命名是一种非常实用的技巧,它可以帮助我们快速实现文件的分类与整理,使文件存储更加有序、高效。 为什么需要文件夹批量重命名&#x…

IP SSL证书申请教程:实现HTTPS加密访问

随着网络安全意识的提高,HTTPS加密访问已经成为网站安全性的重要标准。通过安装SSL证书,网站可以实现数据的加密传输,有效保护用户隐私和数据安全。本文将详细介绍如何为IP地址申请SSL证书,并实现HTTPS加密访问。 一、准备工作 …

Kaggle入门-泰坦尼克号数据及代码

本文讲述了kaggle入门级别的竞赛:泰坦尼克号,有提及如何下载数据,附带有思路和代码解析 前言 我个人还是喜欢直接在kaggle运行,但是有人不能科学上网呀 数据 在找到泰坦尼克号比赛里,创建一个notebook,然…

Excel Module: Iteration #1 EasyExcel生成下拉列表模版时传入动态参数查询下拉数据

系列文章 EasyExcel生成带下拉列表或多级级联列表的Excel模版自定义校验导入数据(修订) 目录 系列文章前言仓库一、实现1.1 下拉元数据对象1.2 构建下拉元数据的映射关系1.3 框架方式1.3.1 框架实现1.3.2 框架用例模版类加载下拉业务导出接口 1.4 EasyExcel方式1.4.1 EasyExce…

数据仓库与数据挖掘实验练习3-4(实验二2024.5.8)

练习3 1.简单文件操作练习 import pandas as pd # 读取文件 pd.read_csv(pokemon.csv) # 读取 CSV 文件的函数调用,它将文件中的数据加载到 DataFrame 中,并指定了 Pokemon 列作为索引列。 pd.read_csv(pokemon.csv,index_colPokemon)#查看类型 type(p…

UE5材质基础(2)——数学节点篇1

UE5材质基础(2)——数学节点篇1 目录 UE5材质基础(2)——数学节点篇1 Add节点 Append节点 Abs节点 Subtract节点 Multiply节点 Divide节点 Clamp节点 Time节点 Lerp节点 Add节点 快捷键:A鼠标左键 值相加…

智慧安监中的物联网主机E6000

物联网主机E6000的研发背景主要源于我国对物联网技术在安全生产、环境监测、火灾预警与防控、人员定位与紧急救援等领域的迫切需求。近年来,随着物联网技术的飞速发展,我国政府对智慧安监的重视程度不断提升,相关的政策扶持力度也在加大。在这…

Ansible--Templates 模块 Tags模块 Roles模块

一 Templates 模块 ①Jinja是基于Python的模板引擎。Template类是Jinja的一个重要组件,可看作一个编译过的模 板文件,用来产生目标文本,传递Python的变量给模板去替换模板中的标记。 ②在配置文件中,会有一些数据(如…

CCF-Csp算法能力认证, 202212-1现值计算(C++)含解析

前言 推荐书目,在这里推荐那一本《算法笔记》(胡明),需要PDF的话,链接如下 「链接:https://pan.xunlei.com/s/VNvz4BUFYqnx8kJ4BI4v1ywPA1?pwd6vdq# 提取码:6vdq”复制这段内容后打开手机迅雷…

前端双语实现方案(VUE版)

一、封装一个lib包 结构如下 en.js use strict;exports.__esModule true; exports.default {sp: {input: {amountError: Incorrect amount format},table: {total: Total:,selected: Selected:,tableNoData: No data,tableNoDataSubtext: Tip: Suggest to recheck your fil…

LeetCode 110. 平衡二叉树

LeetCode 110. 平衡二叉树 1、题目 题目链接:110. 平衡二叉树 给定一个二叉树,判断它是否是 平衡二叉树 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:true示例 2: 输入:root [1,2…

AI写作助手:推荐顶级论文写作工具

ChatGPT生成内容需要注意的问题 永远不要直接提交未经修改的AI文本使用工具如Quillbot、Versabot(支持中文论文生成和润色)、Paraphrasing Tool和Jasper来改变文本的措辞亲自修改短语、句子和文本的其他元素提示ChatGPT重新写自己的文本,并通过多个草稿进行修订 Ch…

如何把多个文件(夹)向上移动1层(或多层)(在批量复制前或后进行)

首先,需要用到的这个工具: 度娘网盘 提取码:qwu2 蓝奏云 提取码:2r1z 假定情况是,我要把下图里的4个文件夹内部的全部文件,合并到04的当前位置来(4个文件夹里面各有5个兔兔的图片&#xff09…

【吃透Java手写】2-Spring(下)-AOP-事务及传播原理

【吃透Java手写】Spring(下)AOP-事务及传播原理 6 AOP模拟实现6.1 AOP工作流程6.2 定义dao接口与实现类6.3 初始化后逻辑6.4 原生Spring的方法6.4.1 实现类6.4.2 定义通知类,定义切入点表达式、配置切面6.4.3 在配置类中进行Spring注解包扫描…

华为ensp中BFD和OSPF联动(原理及配置命令)

作者主页:点击! ENSP专栏:点击! 创作时间:2024年5月6日20点26分 BFD通常指的是双向转发检测。BFD是一个旨在快速检测通信链路故障的网络协议,提供了低开销、短延迟的链路故障检测机制。它主要用于监测两个…

start.spring.io不支持java8,idea使用阿里云又报错

做项目的时候,我们可以发现,访问https://start.spring.io/ 创建脚手架项目的时候,最低是java 17了 但是对于很多项目来说,还是在用java8,这该怎么办呢? 值得庆幸的是,阿里云也同样有相同功能的…

VASP_AIMD+VASPKIT计算含温力学性质

材料的力学性质一直是DFT计算的重要方向,笔者在以往已有针对于静态结构的力学性质诸如弹性常数的相关计算,同时可通过VASPKIT借助相关方程导出力学性能。 bashvaspvaspkit能量应变计算弹性常数 vaspkit计算弹性常数的对称性指定 vaspkit计算弹性常数脚…

visual studio 2017重命名解决方案或项目名称

1.解决方案->右键->重命名->新的名字 2.项目->右键->重命名->新的名字 3.修改程序集和命名空间名称 项目->右键->属性->修改程序集名称和命名空间名称 4.搜索换名 Ctrl-F->输入旧名称->搜索->将所有旧名称改为新名称(注意是整…

C++向函数传递对象

C语言中,对象作为函数的参数和返回值的传递方式有 3 种:值传递、指针传递和引用传递。 1. 对象作为函数参数 把实参对象的值复制给形参对象,这种传递是单向的,只从实参到形参。因此,函数对形参值做的改变不会影响到实…

使用Docker安装Whistle Web Debugging Proxy

大家好,继续给大家分享如何使用docker来安装Whistle Web Debugging Proxy,关于Whistle Web Debugging Proxy的介绍和使用,大家可以参考下面文章,希望本文能够给大家的工作带来一定帮助。 Whistle Web Debugging Proxy介绍及使用 …
最新文章