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

devtools/2024/10/25 1:41:05/

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 实现解法

方法一:快慢指针
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.ppmy.cn/devtools/128561.html

相关文章

Element Plus的el-tree-v2 组件实现仅叶子节点显示勾选框,并且只能单选

实现代码 <template><el-tree-v2:data"treeData":props"defaultProps"node-key"id"ref"treeRef"show-checkbox:check-strictly"true":expand-on-click-node"false"node-click"handleNodeClick&quo…

Python | Leetcode Python题解之第497题非重叠矩形中的随机点

题目&#xff1a; 题解&#xff1a; class Solution:def __init__(self, rects: List[List[int]]):self.rects rectsself.sum [0]for a, b, x, y in rects:self.sum.append(self.sum[-1] (x - a 1) * (y - b 1))def pick(self) -> List[int]:k randrange(self.sum[-1…

【开发语言】c++的发展前景

C作为一种历史悠久且功能强大的编程语言&#xff0c;在软件开发领域一直保持着其独特的地位和广泛的应用前景。尽管近年来出现了许多新的编程语言和技术趋势&#xff0c;但C由于其高性能、低层访问能力以及广泛的生态系统&#xff0c;在多个领域依然具有不可替代的优势。以下是…

1024,程序员节日快乐

今天是10月24日&#xff0c;我们迎来了程序员的节日。 “1024这个数字对程序员而言&#xff0c;究竟有何特殊含义&#xff1f;”原因在于2⁰ 1024&#xff0c;而计算机硬件的计量单位正是基于1024的幂次递进。 例如&#xff0c;1GB1024MB&#xff0c;1MB1024KB。 因此&#…

解释区块链技术的应用场景和优势。

区块链技术是一种分布式数据库技术&#xff0c;其主要特点是去中心化、安全性高、可追溯、不可篡改等。这使得区块链在许多领域具有广泛的应用场景和优势。 首先&#xff0c;区块链技术可以应用于金融领域。例如&#xff0c;可以用于加密货币的发行和交易&#xff0c;使得交易…

SpringBoot技术的车辆管理流程自动化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

从0开始深度学习(20)——延后初始化和自定义层

一般情况下&#xff0c;模型参数在被创建时就被立即初始化了&#xff0c;但如果使用了延后初始化技术&#xff0c;就能在首次传入数据后&#xff0c;再初始化参数&#xff0c;旨在输入维度未知的情况下&#xff0c;预定义灵活的模型&#xff0c;动态推断各个层的参数大小。 有时…

从0开始学python-day14-pandas1

一、基础 1、概述 Pandas 是一个开源的第三方 Python 库&#xff0c;从 Numpy 和 Matplotlib 的基础上构建而来 Pandas 名字衍生自术语 "panel data"&#xff08;面板数据&#xff09;和 "Python data analysis"&#xff08;Python 数据分析&#xff09;…