首页 > 编程语言 >力扣141(Java)-环形链表(简单)

力扣141(Java)-环形链表(简单)

时间:2023-05-05 09:44:05浏览次数:42  
标签:head slow Java 141 fast next 链表 null

题目:

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

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

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

示例1:

输入:head = [3,2,0,-4], pos = 1

输出:true

解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

输入:head = [1,2], pos = 0

输出:true

解释:链表中有一个环,其尾部连接到第一个节点。

示例3:

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

提示:

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

进阶:你能用 O(1)(即,常量)内存解决此问题吗?

来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

参考:代码随想录讲解的视频 和  文字讲解

快慢指针:

  • 定义两个指针slow 和 fast,从头结点出发,使fast每次走两步,slow每次走一步;
  • 如果存在环,那快慢指针一定是在环中相遇,因为fast一定先进入环中,相对于slow来说,fast是以每次移动一个结点的速度来慢慢靠近slow的,要相遇一定是在环中相遇;
  • 移动的过程中,循环条件是:fast != null && fast.next != null,如果fast == slow 说明相遇了,直接返回true,循环结束后,还没有返回值就说明不存在环,直接返回false。

代码:

 1 /**
 2  * Definition for singly-linked list.
 3  * class ListNode {
 4  *     int val;
 5  *     ListNode next;
 6  *     ListNode(int x) {
 7  *         val = x;
 8  *         next = null;
 9  *     }
10  * }
11  */
12 public class Solution {
13     public boolean hasCycle(ListNode head) {
14         if (head == null || head.next == null) return false;
15         ListNode fast = head, slow = head;
16         while (fast != null && fast.next != null){
17             fast = fast.next.next;
18             slow = slow.next;
19             if (fast == slow) return true;
20         }
21         return false;
22     }
23 }

标签:head,slow,Java,141,fast,next,链表,null
From: https://www.cnblogs.com/liu-myu/p/17373182.html

相关文章

  • Java正则提取中间段文本
    核心正则开始字符串(.*)结束字符串示例Stringa="【权益到账提醒】尊敬的客户,您好!您已获得权益礼包,【兑换码】:11223344。请妥善保管好您的兑换码,一经兑换,立即失效。";Matchermatcher=Pattern.compile("【兑换码】:(.*)。请妥善保管好您的兑换码").matcher(a);if(ma......
  • Java中数字相关的类有哪些?Nuber数字类和Math数学类详解
    前言我们在解决实际问题时,会经常对数字、日期和系统设置进行处理,比如在我们的代码中,经常会遇到一些数字&数学问题、随机数问题、日期问题和系统设置问题等。为了解决这些问题,Java给我们提供了多个处理相关问题的类,比如Number类、Math类、Random类、BigInteger类、BigDecimal类、......
  • Java01:常识
     高可用,高兴能,高并发。   writeoncerunanywhere.简单性,面向对象,可移植性,高性能,分布式,动态性,多线程,安全性,健壮性。java三大版本:JavaSE:标准版(桌面程序,控制台开发)嵌入式版本已经寄了。JavaEE:E企业级开发(web端,服务器开发)JDKJREJVMJDK:JavaDevelop......
  • java网络编程示例
    1.clientimportjava.io.*;importjava.net.InetAddress;importjava.net.Socket;publicclassTcpClientDemo{publicstaticvoidmain(String[]args){InetAddressbyName=null;Socketsocket=null;OutputStreamos=null;......
  • IntelliJ IDEA 2022.3.2 最新专业版 Windows系统下安装, 一直可用,业界公认的最好的jav
    ​第三步: IDEA安装补丁1、补丁下载地址: 下载链接2、补丁安装流程下载并安装IDEA后,先不启动IDEA下载补丁程序并解压并放置任意目录执行脚本install-current-user.vbs​ 双击执行install-current-user.vbs脚本,等待过程大概10-30秒,如看到弹框提示Done......
  • JAVA8新特性
    JAVA8新特性Lambda表达式只有函数式接口才能使用Lambda表达式​ Lambda表达式是JDK8中的一个语法糖,它可以对某些匿名内部类的写法进行简化,它是函数式编程思想的一个重要体现,让我们不用关注是什么对象,而是更关注我们对数据进行了什么操作。核心原则​ 可推导可省略基本格......
  • java基于springboot+vue的宿舍管理系统、学生宿舍管理系统、高校宿舍管理系统,附源码+
    1、项目介绍java基于springboot+vue的宿舍管理系统、学生宿舍管理系统、高校宿舍管理系统,实现管理员:首页、个人中心、公告信息管理、院系管理、班级管理、学生管理、宿舍信息管理、宿舍安排管理、卫生检查管理、报修信息管理、报修处理管理、缴费信息管理,学生;首页、个人中心、公......
  • ds:带头结点的单链表与不带头结点的单链表区别
     写在前边:单链表都有头指针,不一定有头结点;有无头结点的单链表,定义时数据类型都一样,只是初始化时、插入、删除时不同。 一、带头结点的单链表头结点:为方便编写代码而设置的头结点。存储结构:L->头结点->a1->a2->NULL,头结点不存储数据初始化:malloc申请空间后要L->next=NULL......
  • 命令行编译和执行java代码
    虽然现在IDE很强大又很智能,但是平常随意写点练手的代码的时候,直接在命令行中使用vim和java命令更为方便快捷,可以做到无鼠标纯键盘的操作。首先保证将java相关指令添加到了环境变量中;1.编译class文件:javac-d./Test.java编译好的class文件会放置到环境当前目录(./)中。-d......
  • 20基于java的科研管理系统设计与实现
    背景及意义目前许多人仍将传统的纸质工具作为信息管理的主要工具,而网络技术的应用只是起到辅助作用。在对网络工具的认知程度上,较为传统的office软件等仍是人们使用的主要工具,而相对全面且专业的信息管理软件仍没有得到大多数人的了解或认可。本选题则旨在通过标签分类管理等方......