LeetCode第141题——环形链表(Java)

news2024/11/28 20:44:33

题目描述

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

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

如果链表中存在环 ,则返回 true 。 否则,返回 false

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 链表中节点的数目范围是 [0, 104]
  • -105 <= Node.val <= 105
  • pos-1 或者链表中的一个 有效索引

思路01

  • 该题目最容易想到的解法就是遍历该链表,使用HashMap存储每一个节点及其出现次数,当出现次数大于1的时候,说明该链表有环
  • 但从结果可以看出,该解法花费的时间不少,时间复杂度为O(n)
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        Map<ListNode,Integer> map1 = new HashMap<>();
        ListNode node = head;
        while(node!=null){
                if(map1.get(node)!=null)
                    return true;
                map1.put(node,1);
            node = node.next;
        }
        return false;
    }
}

在这里插入图片描述

思路02

  • 我们可以使用快慢指针来解决该问题,定义2个指针,慢指针在遍历链表时候每次移动一个节点,快指针在遍历链表时候每次一定两个节点,因为速度之比为2倍,所以如果链表有环的话,快慢指针一定会相遇,当快慢指针相遇时代表该链表有环。
  • 如果快慢指针遍历的节点为null,那么就代表该链表无环
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = null;
 *     }
 * }
 */
public class Solution {
    public boolean hasCycle(ListNode head) {
        ListNode low = head,high = head;
        while(low!=null && high!=null && high.next!=null){
            low = low.next;
            high = high.next.next;
            if(low == high)
                return true;
        }
        return false;
    }
}

在这里插入图片描述

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

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

相关文章

多线程|基于阻塞队列和环形队列的生产者消费者模型架构

前言 那么这里博主先安利一下一些干货满满的专栏啦&#xff01; Linux专栏https://blog.csdn.net/yu_cblog/category_11786077.html?spm1001.2014.3001.5482操作系统专栏https://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482手撕数据结构https:/…

办公软件中可以使用chatGPT吗?

随着ONLYOFFICE新品协作空间的发布&#xff0c;有很多朋友已经开始在工作区或桌面版用上chatGPT的朋友担心&#xff0c;在协作空间是否也可以正常使用chatGPT&#xff0c;我可以很负责的告诉大家&#xff0c;完全可以正常使用。 什么是ONLYOFFICE协作空间&#xff1f; 简言之&…

Java8新特性--Lambda表达式

一、简述 Lambda 表达式&#xff0c;也可称为闭包&#xff0c;它 允许把函数作为一个方法的参数 (函 数作为参数传递进方法中) Lambda 简化了匿名内部类的形式&#xff0c; 可以达到同样的效果&#xff0c;匿名内部类在 编译之后会创建一个新的匿名内部类 出来&#xff0c;而 L…

Daftart.ai:人工智能专辑封面生成器

前言 Daft Art AI是一款使用人工智能技术来帮助您制作专辑封面的软件&#xff0c;它可以让您在几分钟内&#xff0c;用简单的编辑器和精选的美学风格&#xff0c;为您的专辑或歌曲创建出惊艳的高质量的艺术品。Daft Art AI有以下几个特点&#xff1a;简单易用&#xff1a;您只…

CVE漏洞复现-CVE-2019-11043-PHP-FPM 远程代码执行漏洞

CVE-2019-11043-PHP-FPM 远程代码执行漏洞 漏洞描述 来自Wallarm的安全研究员Andrew Danau在9月14-16号举办的Real World CTF中&#xff0c;意外的向服务器发送%0a(换行符)时&#xff0c;服务器返回异常信息。由此发现了这个0day漏洞 当Nginx使用特定的 fastcgi 配置时&…

Java学习14(ThreadLocal详解)

对于ThreadLocal&#xff0c;大家的第一反应可能是很简单呀&#xff0c;线程的变量副本&#xff0c;每个线程隔离。那这里有几个问题大家可以思考一下&#xff1a; ThreadLocal的 key 是弱引用&#xff0c;那么在 ThreadLocal.get()的时候&#xff0c;发生GC之后&#xff0c;k…

Python小姿势 - # 如何在Python中实现基本的数据类型

如何在Python中实现基本的数据类型 Python是一门面向对象的编程语言&#xff0c;基本的数据类型包括整数、浮点数、字符串、布尔值、列表、元组、字典等。 整数是最基本的数据类型&#xff0c;一个整数可以是任意大小的&#xff0c;只要内存允许。 浮点数也称为实数&#xff0c…

Ubuntu/CentOS 安装gitlab

直接用命令 sudo apt install gitlab-ce 安装最新版 也可以用sudo apt-get install gitlab-ce15.10.2-ce.0 指定要安装的版本&#xff0c;具体参考https://forum.gitlab.com/t/installing-older-versions-of-gitlab-on-ununtu/29507 如果已经安装&#xff0c;可以把原来版本卸…

QT QVBoxLayout 垂直布局控件

本文详细的介绍了QVBoxLayout控件的各种操作&#xff0c;例如&#xff1a;新建界面、添加控件、布局控件、显示控件、添加空白行、设置间距 、添加间距、设置位置、设置外边距、设置边距、添加固定宽度、方向上、方向下、方向左、方向右等等、 样式表等操作。 实际开发中&#…

Qt | 实现一个简单的可以转动的仪表盘

环境&#xff1a;vs2017Qt5.14.2 效果图&#xff1a; 准备工作&#xff1a; 效果图中的可以转动的仪表盘效果分为三个部分&#xff1a; 背景图&#xff08;就是带去掉中间白色原点&#xff0c;去掉中间蓝色指针省下的部分&#xff09;&#xff1b;指针图片&#xff08;中间蓝…

客户端发布后,一体机无法下载和安装

一、问题描述&#xff1a;客户端和服务端在不同网段&#xff0c;可以ping通IP&#xff0c;但是主机名ping不通&#xff0c;客户端提示『OPC 找不到主机名』 解决方法&#xff1a; 修改客户端机器的『hosts』文件&#xff0c;路径为&#xff1a; 『C:\Windows\System32\driver…

【初学人工智能原理】【2】方差代价函数:知错

前言 本文教程均来自b站【小白也能听懂的人工智能原理】&#xff0c;感兴趣的可自行到b站观看。 本文【原文】章节来自课程的对白&#xff0c;由于缺少图片可能无法理解&#xff0c;故放到了最后&#xff0c;建议直接看代码&#xff08;代码放到了前面&#xff09;。 代码实…

一、linux系统基础

一、搭建Linux学习环境 如何安装linux操作系统: (1)安装独立的Linux系统,不再安装其他操作系统。 (2)安装Windows与Linux并存的多操作系统,启动时通过菜单选择要启动的操作系统。 (3)在虚拟机中安装Linux操作系统。 本次学习采用第三种方式,在虚拟机中安装linux操…

清理 C 盘空间最简单的方法

目录 一、清理C盘空间 二、删除休眠文件 三、删除软件缓存 四、清理临时文件 一、清理C盘空间 Windows系统内置的磁盘&#xff0c;都带有清理功能&#xff0c;我们可以先来清理磁盘空间&#xff0c;鼠标选择C盘&#xff0c;右键【属性】&#xff0c;可以看到有个【磁盘清理…

irreader RSS 订阅源阅读器工具软件 - 一款强大的网络内容阅读器

irreader 是一款强大的网络内容阅读器&#xff0c;不仅支持订阅 RSS 文章&#xff0c;还能够订阅网站、播客等内容&#xff0c;将众多订阅源聚合于一处&#xff0c;告别纷杂的互联网信息。 方便的内置订阅源 软件界面采取源列表、文章列表和内容区三栏式布局&#xff0c;内置的…

Docker操作MongoDB启停

对于docker安装配置有疑问的可以看这一篇Docker概念、安装以及配置镜像加速器 docker images可查看docker已有镜像 docker pull mongo:5.0.16拉取镜像&#xff08;可从DockerHub查找自己所需&#xff09; docker ps -a查看docker进程 docker run --name mongo -d -p 27017:270…

原理解析:HyperBDR+华为云,高自动化低TCO的云容灾解决方案

什么是HyperBDR云容灾&#xff1f; HyperBDR云容灾是云原生业务级别容灾工具&#xff0c;充分利用云原生能力提升容灾效率&#xff0c;降低容灾TCO。采用块级别全量增量复制技术&#xff0c;备份效率高&#xff1b;最新无主机数据同步技术&#xff0c;让容灾数据存储成本更低&…

JS高级 -- 深入面向对象

1. 编程思想 1.1 面向过程 面向过程就是分析出解决问题所需要的步骤&#xff0c;然后用函数把这些步骤一步一步实现&#xff0c;使用的时候再一个一个的依次调用就可以了。 面向过程&#xff0c;就是按照我们分析好了的步骤&#xff0c;按照步骤解决问题 eg&#xff1a;蛋炒…

Win10电脑开机蓝屏多次重启无效怎么办?

Win10电脑开机蓝屏多次重启无效怎么办&#xff1f;有用户在使用电脑的时候遇到了系统蓝屏的问题&#xff0c;想要通过重新启动的方式来解决问题&#xff0c;但是多次重新启动电脑都还是遇到蓝屏的问题。那么这个情况要怎么去进行解决呢&#xff1f;来看看以下的处理方法吧。 准…

数字化转型导师坚鹏:数字化转型背景下的保险公司人力资源管理

数字化转型背景下的保险公司人力资源管理 课程背景&#xff1a; 很多保险公司存在以下问题&#xff1a; 不清楚保险公司数字化转型目前的发展阶段与重要应用&#xff1f; 不知道保险公司数字化转型给保险公司人力资源管理带来哪些机遇与挑战&#xff1f; 不知道保险公司…