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

CC10-判断链表中是否有环

目录

一、题目分析

二、解题思路

三、代码实现

四、代码解释

五、测试结果


在链表的相关问题里,判断链表是否存在环是一个基础且重要的题目。今天我们就来学习如何用 Java 解决 “判断链表中是否有环” 的问题。

一、题目分析

题目要求判断给定的链表中是否有环,如果有环则返回 true,否则返回 false。例如,输入链表 {3,2,0,-4},1(表示链表有环,环的入口相关),应返回 true

二、解题思路

我们采用快慢指针法

  • 定义两个指针,slow(慢指针)每次走 1 步,fast(快指针)每次走 2 步。
  • 如果链表有环,slow 和 fast 会在环内相遇;如果链表无环,fast 会先走到链表末尾(fast 或 fast.next 为 null)。

三、代码实现

import java.util.*;// 定义单链表节点类
class ListNode {int val;ListNode next;ListNode(int x) {val = x;next = null;}
}public class Solution {public boolean hasCycle(ListNode head) {// 链表为空,无环if (head == null) {return false;}// 快慢指针ListNode slow = head;ListNode fast = head;// 寻找相遇点while (fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;// 快慢指针相遇,说明有环if (slow == fast) {return true;}}// 快指针走到链表末尾,无环return false;}// 测试方法public static void main(String[] args) {// 构建有环链表:3 -> 2 -> 0 -> -4 -> 2(形成环)ListNode node1 = new ListNode(3);ListNode node2 = new ListNode(2);ListNode node3 = new ListNode(0);ListNode node4 = new ListNode(-4);node1.next = node2;node2.next = node3;node3.next = node4;node4.next = node2; // 形成环Solution solution = new Solution();boolean hasCycle = solution.hasCycle(node1);// 输出结果,预期为 trueSystem.out.println(hasCycle);}
}

四、代码解释

  1. ListNode 类:定义了单链表的节点结构,包含值 val 和指向下一节点的 next
  2. hasCycle 方法
    • 先处理链表为空的情况,直接返回 false
    • 初始化快慢指针 slow 和 fast 都指向链表头。
    • 在循环中,慢指针每次走 1 步,快指针每次走 2 步。若快慢指针相遇,说明有环,返回 true;若快指针走到链表末尾(fast 或 fast.next 为 null),说明无环,返回 false
  3. main 方法:构建有环链表,调用 hasCycle 方法判断是否有环并输出结果。

五、测试结果

运行测试代码,输出结果为 true,与预期一致,说明代码正确。

这种方法的空间复杂度为 O(1)(仅使用常数个额外变量),时间复杂度为 O(n)(最多遍历链表一次),高效且符合题目要求。

http://www.dtcms.com/a/490402.html

相关文章:

  • 【ZEGO即构开发者日报】谷歌推出新款视频生成模型 Veo 3.1;腾讯开源通用文本表示模型Youtu-Embedding;AI 陪伴赛道观察……
  • [Sora] 视频自动编码器(VAE) | `encode_``decode`
  • 算法沉淀第四天(Winner)
  • 西藏地图飞线html
  • 网站建设与管理课程代码做徽章标牌的企业网站
  • selenium实现自动化脚本的常用函数
  • 大语言模型,一个巨大的矩阵
  • 衡阳营养师报考网站大宗贸易交易平台
  • Azure API Management 负载均衡与故障转移策略完整指南
  • TI CCS软件安装
  • 内存映射文件
  • 网站开发开发语言企业网站做seo的优势
  • 资料片:R语言中常见的英文术语及其含义
  • 企业出海的挑战与应对方案
  • 架构术语:什么是东西流量和南北流量
  • 电子电器架构——车载网关转发buffer心得汇总
  • (Python)终端着色进阶:256色基础及色码效果展示
  • 《R for Data Science (2e)》免费中文翻译 (第10章) --- Exploratory data
  • 简述对网站进行评析的几个方面.wordpress 内涵
  • Python自动化从入门到实战(23):Python打地鼠游戏开发
  • (论文速读)ECLIPSE:突破性的轻量级文本到图像生成技术
  • dede 网站入侵新媒体h5是什么
  • 嵌入式系统守护者:复位IC详解与选型指南
  • 实战指南:用Cliproxy实现Reddit多账号安全运营的完整方案
  • Ovi-音视频生成模型
  • MySQL实战篇09:MySQL主从延迟压测-------每秒1000条写入,延迟1秒
  • 免费自助建站系统上海软件开发工资一般多少
  • 淘客网站做百度推广教育门户网站模板
  • 微信社群管理开发
  • 可再生能源电解水制氢电源并联方案研究