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

leetcode hot100 之【LeetCode 141. 环形链表】 java实现

LeetCode 141. 环形链表

题目描述

给定一个链表,判断链表中是否有环。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(pos 索引从 0 开始)。如果 pos-1,则表示链表中没有环。

示例 1:

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

示例 2:

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

示例 3:

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

Java 实现解法

方法一:快慢指针
/**
 * Definition for singly-linked list.
 * class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) {
 *         val = x;
 *         next = 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) {
        if (head == null || head.next ==null) 
            return false;
        ListNode fast = head;
        ListNode slow = head;
        while (fast != null && fast.next != null) {
            fast = fast.next.next;
            slow = slow.next;
            if (fast == slow) {
                return true;
            }
        }
        return false;
    }
}

解题思路

  • 快慢指针法:这是一种非常经典的判断链表中是否有环的方法,也称为 Floyd 算法。
    • 我们初始化两个指针 slowfast,分别指向链表的头节点。
    • slow 每次移动一步,fast 每次移动两步。
    • 如果链表中有环,那么 fast 指针最终会追上 slow 指针,因为 fast 的移动速度是 slow 的两倍。
    • 如果链表中没有环,fast 指针会先到达链表的末尾,即 fastfast.next 将为 null,此时函数返回 false

这种方法的时间复杂度是 O(n),其中 n 是链表的长度。空间复杂度是 O(1),因为我们只使用了有限的额外空间来存储指针。这种方法简单且高效,是检测链表中环的首选方法。

注:来源leetcode网站


http://www.kler.cn/news/362501.html

相关文章:

  • 界面控件DevExtreme中文教程 - 如何与Amazon S3和Azure Blob存储集成?
  • oracle 行转列(PIVOT 多个行数据按照指定的列进行汇总) 列转行(UNPIVOT)
  • 使用ceph-csi把ceph-fs做为k8s的storageclass使用
  • 《Linux从小白到高手》综合应用篇:深入理解Linux常用关键内核参数及其调优
  • Linux中如何理解一切皆文件
  • 优化UVM环境(九)-将interface文件放在env pkg外面
  • sql注入 --二次注入堆叠注入文件读取getshell
  • Shiro 授权(Authorization)总结
  • swagger讲解
  • 集群Spring定时只执行一次
  • 查收查引常用数据库——万方
  • 矩阵基础知识
  • Docker容器间链路管理
  • C++学习笔记----9、发现继承的技巧(二)---- 重用目的的继承
  • 数据库产品中审计与日志(Auditing and Logging)的功能简介
  • kebuadm部署k8s集群
  • 智联云采 SRM2.0 testService SQL注入漏洞复现
  • 【软件测试: jmeter工具】OS进程取样器调用python
  • 【算法】KMP字符串匹配算法
  • redis未授权访问
  • QExcel 保存数据 (QtXlsxWriter库 编译)
  • JMeter 动态参数赋值实践
  • Docker 安装Postgres和PostGIS,并制作镜像
  • centos系统防火墙SELinux设置指令
  • TensorFlow:强大的机器学习框架
  • Vue3获取ref元素的几种方式