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

2025年- H38-Lc146 --142.环形链表(快慢指针,快2慢1,快1慢1)--Java版

1.题目描述

在这里插入图片描述

2.思路

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第一步:判断是否有环
快慢指针(fast 每次走 2 步,slow 走 1 步);

如果 fast == slow,说明有环;

第二步:找环的起始节点
两指针:一个从头走,一个从相遇点走,每次走一步;

相遇点就是入环节点。

补充:
(1)在本题的求解过程中,双指针会产生两次“相遇”。
双指针的第一次相遇:
设两指针 fast,slow 指向链表头部 head 。
令 fast 每轮走 2 步,slow 每轮走 1 步。
(2)双指针第二次相遇:
令 fast 重新指向链表头部节点。此时 f=0,s=nb 。
slow 和 fast 同时每轮向前走 1 步。
当 fast 指针走到 f=a 步时,slow 指针走到 s=a+nb 步。此时两指针重合,并同时指向链表环入口,返回 slow 指向的节点即可。
模拟指针两次相遇的动态图

3.代码实现

 class ListNode {int val;ListNode next;public ListNode() {}ListNode(int x) {val = x;next = null;}public ListNode(int val, ListNode next) {this.val = val;this.next = next;}}
public class H142 {public ListNode detectCycle(ListNode head) {ListNode slow=head;ListNode fast=head;//一开始要同起点出发//1.存在空节点或者一个节点的,返回nullif(head==null||head.next==null){return null;}//3.开始执行快2慢1的操作while(fast!=null&&fast.next!=null)//不能是链表的情况,要同时存在。{fast=fast.next.next;slow=slow.next;if(fast==slow)//第一次相遇,说明存在环。快慢指针一起从原点出发{//第二次相遇,快慢指针每次走一步fast=head;//第二次相遇快指针从head开始走while(fast!=slow)//用if和while都可以,说明p1和p2 第二次还没相遇{fast=fast.next;slow=slow.next;}return fast;//如果p1=p2,说明此时快慢指针相遇。第二次相遇过程,慢指针叫p2,快指针叫p1}}return null;//说明无环}public static void  main(String[] args){H142 test = new H142();// 构建链表:3 -> 2 -> 0 -> -4ListNode node4 = new ListNode(-4);ListNode node3 = new ListNode(0, node4);ListNode node2 = new ListNode(2, node3);ListNode head = new ListNode(3, node2);// 构建环:让 -4 指向 2,形成环node4.next = node2;ListNode res = test.detectCycle(head);System.out.print("输出返回链表开始入环的第一个节点的结果;");if (res != null) {System.out.print(res.val);}else{System.out.print("无环");}}}

相关文章:

  • 前端流行框架Vue3教程:21. 插槽(3)
  • C语言| 指针变量的初始化
  • 如何测试北斗卫星通讯终端的性能?
  • DEBUG:Lombok 失效
  • C++类与对象--6 特性二:继承
  • std::vector<>.emplace_back
  • flutter设置最大高度,超过最大高度时滑动显示
  • 使用frp内网穿透本地的虚拟机
  • spring event事件(四)内部事件(1)ApplicationReadyEvent
  • 介绍Buildroot
  • 2025ICPC南昌邀请赛题解
  • 记录学习的第三十六天
  • ZYNQ Cache一致性问题解析与实战:从原理到创新优化
  • PEFT简介及微调大模型DeepSeek-R1-Distill-Qwen-1.5B
  • mysql不能聚合之数据清洗逗号
  • 第7天-Python+PyEcharts实现股票分时图实战教程
  • OD 算法题 B卷 【需要打开多少监视器】
  • 算法打卡第一天
  • 每日算法刷题Day10 5.19:leetcode不定长滑动窗口求最长/最大4道题,结束定长滑动窗口,用时1h
  • 大模型的开发应用(三):基于LlaMAFactory的LoRA微调(上)
  • 外交部:中巴各领域合作非常密切,不针对第三方
  • 家国万里,从家庭叙事看超大城市文明治理的上海方案
  • 中国与东盟十国全面完成中国—东盟自贸区3.0版谈判
  • 王晋卿读《酒的精神》︱乏味时代的有味之思
  • 梅花奖在上海丨好戏在上海不缺观众,冷门剧种叫好又叫座
  • 央行行长潘功胜主持召开金融支持实体经济座谈会