当前位置: 首页 > article >正文

LeetCode100之环形链表(141)--Java

1.问题描述

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

        示例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 或者链表中的一个 有效索引 

        难度等级

               简单

        题目链接

                环形链表

2.解题思路

        这道环形链表的问题相当容易解决,有点像我们小学时候的追及问题。我们定义两个快慢指针来模拟两个人相互追及。

        //快指针
        ListNode fast = head;
        //慢指针
        ListNode slow = head;

        如果链表真的是环形链表的话,它就会形成一个圈,那么我们的快慢指针相当于两个人从同一个入口进入一个闭环的操场在跑步。快的那个人只要时间足够,就可以比慢的那个人多跑一圈而相遇。

        我们假设快指针的步频为2,慢指针步频为1,如果快指针能走到尽头,遇到null,说明不是环形链表,如果与慢指针相遇,说明是环形链表。

        //遍历
        while(fast != null && fast.next != null){
            //慢指针一次走一步
            slow = slow.next;
            //快指针一次走两步
            fast = fast.next.next;
            if(slow == fast){
                return true;
            }
        }
        return false;

3.代码展示

/**
 * 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 fast = head;
        //慢指针
        ListNode slow = head;
        //遍历
        while(fast != null && fast.next != null){
            //慢指针一次走一步
            slow = slow.next;
            //快指针一次走两步
            fast = fast.next.next;
            if(slow == fast){
                return true;
            }
        }
        return false;
    }
}

4.总结

        这道环形链表的题,我们当成小学的追及相遇问题就可以轻松解决了。祝大家刷题愉快~


http://www.kler.cn/a/397438.html

相关文章:

  • 群控系统服务端开发模式-应用开发-前端图片格式功能开发
  • Zero、Zero-Offload、Zero-Infinity是什么
  • 机器学习 决策树
  • 浅层神经网络
  • vue3:computed
  • QSS 设置bug
  • HashMap源码分析上-红黑树
  • 「Mac玩转仓颉内测版7」入门篇7 - Cangjie控制结构(下)
  • [系统安全] PE文件知识在免杀中的应用
  • Spring:DI依赖注入的方式
  • Kafka 到 Kafka 数据同步
  • 牛客挑战赛77
  • PHP反序列化靶场(php-SER-libs-main 第一部分)
  • Servlet⾥面的doPost-doGet和路路径匹配讲解(笔记)
  • 第 11 章 - Go语言函数
  • Python爬虫下载新闻,Flask展现新闻(2)
  • JS学习日记(jQuery库)
  • webman使用中间件验证指定的控制器及方法[青锐CC]
  • ubuntu20.04安装FLIR灰点相机BFS-PGE-16S2C-CS的ROS驱动
  • Redisson 中开启看门狗(watchdog)机制
  • 不用来回切换,一个界面管理多个微信
  • FPGA使用Verilog实现CAN通信
  • “高级Java编程复习指南:深入理解并发编程、JVM优化与分布式系统架构“
  • OpenCV双目立体视觉重建
  • 在openi平台 基于华为顶级深度计算平台 openmind 动手实践
  • OSS文件上传