LeetCode 图解 | 141.环形链表

news2024/11/30 11:28:38

141.环形链表

  • 题目描述
  • 思路分析
    • 快慢指针思想
  • 代码实现

题目描述

给你一个链表的头节点 head ,判断链表中是否有环。

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

如果链表中存在环 ,则返回 true 。 否则,返回 false 。
在这里插入图片描述

思路分析

快慢指针思想

本题我们将采用快慢指针解决,那什么是快慢指针思想呢?

假设两个指针,一个快指针和一个慢指针(两个指针的指向不能相同,否则还没开始就结束判断条件了,因为它们相遇了),那什么又是快慢指针呢?慢指针每次走一步(即slow.next),快指针每次走两步(即fast.next.next)。
在这里插入图片描述
按照这步伐,如果是有环的,快慢指针必定会进环相遇,相遇就是说快慢指针所指向的节点都是相同。打个简单的例子,小明和小红在操场跑步,小明跑着快,小红跑着慢,那跑着快的肯定会追上跑着慢的,这就是相遇。
在这里插入图片描述

代码实现

/**
 * @Author: 爱摸鱼的TT~
 * @Description: https://leetcode.cn/problems/linked-list-cycle/
 * @Date Created in 2022-11-20 15:20
 * @Modified By:
 */
public class _141_环形链表 {

    public boolean hasCycle(ListNode head) {
        if(head == null || head.next == null){
            return false;
        }
        ListNode slow = head;
        ListNode fast = head.next;
        while(fast != null && fast.next != null){
            slow = slow.next;
            fast = fast.next.next;
            if(slow == fast){
                return true;
            }
        }
        return false;
    }

    class ListNode {
         int val;
         ListNode next;
         ListNode(int x) {
             val = x;
             next = null;
         }
    }
}

在这里插入图片描述
有同学疑问着:在while循环的判断条件,能不能只写其一呢?答案肯定是不行的啦,why?

大家想想,如果去掉 fast != null ,那这时有可能 fast.next.next = null ,这时再次进行条件判断,是不是会报空指针异常呢;那如果去掉 fast.next != null 会造成什么后果?有可能 fast.next = null 这时 fast = null.next 照样是空指针异常。因此,这两个条件都必须满足。

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

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

相关文章

Nuxt 3.0.0正式发布,集成Element Plus和Ant Design Vue脚手架

发布说明 Nuxt 是使用简便的 Web 框架,用于构建现代和高性能的 Web 应用,可以部署在任何运行 JavaScript 的平台上。 Nuxt 3.0 11天前正式发布了稳定版,3.0 基于 Vue 3,为 TypeScript 提供了 “一等公民” 支持,并进行…

【Unity3D】卷轴特效

1 原理 当一个圆在地面上沿直线匀速滚动时,圆上固定点的运动轨迹称为旋轮线(或摆线、圆滚线)。本文实现的卷轴特效使用了旋轮线相关理论。 以下是卷轴特效原理及公式推导,将屏幕坐标 (x) 映射到纹理坐标 (u)。 注意:屏…

Controller Area Network(CAN)简介

文章目录前言-什么是通讯?一、CAN是什么?二、CAN的应用示例CAN网络细分三、CAN发展历史四、汽车网络汇总总结前言-什么是通讯? “通讯是两个或两个以上参与者之间交换信息的有意识活动,目的是通过符号和语义规范的共享系统来发送…

微服务系列之初探“微服务架构”

随笔 有时你必须对你想得到的东西充满敬畏。 参考书籍: “凤凰架构”“微服务架构设计模式” 在了解微服务架构之前我们有必要解答“什么是架构”、“什么是架构的风格”这两个问题,同时需要带着“架构并不是被发明出来的,而是持续演进的…

[AI] LRTA*ls(k)搜索算法

LRTA*LS[K]一、LRTA*(K)算法的缺点二、LRTA∗LS(k)LRTA*_{LS}(k)LRTA∗LS​(k)算法1、选择局部空间2、更新局部空间论文在这里! 一、LRTA*(K)算法的缺点 LRTA*(K)算法每次要更新队列Q里的state,但有三点缺陷: 如果state y进入 Q&#xff0c…

【网络工程】6、防火墙介绍及配置实操

接上篇《5、路由器介绍及配置实操》 之前我们讲解了网络设备路由器的介绍,以及完成了路由器的相关配置实操。本篇我们来讲解防火墙的基础知识以及相应的实操案例。 一、什么是防火墙? 防火墙是一个安全产品,它可以把安全的内网和不安全的外网…

【前端】jQuery-概述+基本使用+常用API

目录 一、jQuery概述 1.1JavaScript库 1.2jQuery的概念 二、jQuery的基本使用 2.1jQuery的下载 2.2jQuery的使用步骤 2.3jQuery的入口函数 2.4jQuery的顶级对象$ 2.5jQuery对象和DOM对象 三、jQuery常用API 3.1jQuery选择器 3.1.1jQuery基础选择器 3.1.2jQuery层级选…

Linux下C语言实现HTTP文件服务器和TCP协议实现网络数据传输

在实际开发中经常用到web框架,比如Servlet,SpringBoot等,这些开发框架提高了我们的开发效率,节省了开发时间。但是这会令我们技术人员处于浮云之上,看不到其本质。说实话,Java语言那么流行,其本…

springboot-自动配置

一、简介 在搭建springboot应用的时候,无需像之前spring的时候,要一堆繁琐的配置文件之类的。一个main的方法,就能把springboot的项目run起来。和其他框架整合也是非常的简单,只需要使用到Enablexxxxx注解就可以搞起来。 二、原理…

外卖项目09---Redis了解

目录 Redis了解 141 一、Redis入门 143 1.1Redis简介 143 1.2Redis下载与安装 143 1.3Redis入门---Redis服务启动 144 1.3.1Redis服务启动 1.3.2设置密码远程连接 二、Redis数据类型 145 三、Redis常用命令 146 3.1Redis常用命令---字符串string操纵命令 3.2Redis…

现代密码学导论-21-分组密码

目录 3.6.3分组密码及其操作模式 ECB(Electronic Code Book) 电码本模式 CBC(Cipher Block Mode) 密文分组链接方式 THEOREM 3.32 CBC模式的CPA安全 连锁CBC模式 OFB(Output Feedback Mode) 输出反馈模式 CTR(Counter) 计数器模式 THEOREM 3.33 CTR多明文PCA安全 THE…

C语言学习之路(基础篇)—— 复合类型(自定义类型)

说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 结构体 1) 概述 数组:描述一组具有相同类型数据的有序集合,用于处理大量相同类型的数据运算。 结构体:将多个…

工具分享:Springboot+Netty+Xterm搭建一个网页版的SSH终端

一. 简述 搭建一个web ssh,主要是借助websocket和xterm,可以实现一个类似于xshell的效果,如图: 二. 技术栈 这里使用了springboot、netty、jsch、react、Ts,xterm。 这里我用了springboot和netty实现了websocket,js…

稳了,我用 Python 可视化分析和预测了 2022 年 FIFA 世界杯

许多人称足球为 “不可预测的游戏”,因为一场足球比赛有太多不同的因素可以改变最后的比分。 预测一场比赛的最终比分或赢家确实是很难的,但在预测一项比赛的赢家时就不是这样了。在过去的5年中,Bayern Munich 赢得了所有的德甲联赛&#xf…

如何发布一个属于自己的 npm 包

如何发布一个属于自己的 npm 包 start 在日常的工作中,我们会接触很多 npm 包。 例如: npm install jquerynpm install vue/clinpm install axios# ... 等等有时候会想到,构建一个属于自己的 npm 包,应该超级酷吧? …

zabbix基础环境部署

目录 一、环境准备 二、部署LNMP 1、安装Nginx及其依赖包 2、修改nginx配置 3、测试页面 三、部署zabbix服务端 1、下载zabbix 2、安装源码zabbix 3、为zabbix创建数据库与数据库账户 4、搭建Zabbix页面 4.1、第1步 Check of pre-requisites 4.2、第2步 Configure D…

Python代码的编写运行方式

Python代码的编写运行方式介绍 python官方运行环境可到网站https://www.python.org/downloads/找到合适版本下载安装。 安装比较容易,特别强调,安装过程建议勾选“Add Python to PATH”(将Python添加到PATH环境变量)【注1】&…

Docker安装Minio

寻找Minio镜像 Docker Hub 查找官方镜像 下载Minio镜像 下载最新版Minio镜像 docker pull minio/minio等同于 docker pull minio/minio:latest下载指定版本的Minio镜像 docker pull minio/minio:RELEASE.2022-11-26T22-43-32Z.fips检查当前所有Docker下载的镜像 docker …

第六章TCP/IP——网络传输硬件设备

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…

Linux进程通信之消息队列

目录 1.消息队列的原理: 2.消息队列的接口: (1)创建消息队列 (2)向消息队列发送消息 (3)接收消息 (4)操作消息队列的接口 1.消息队列的原理: 消…