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

【LeetCode】141. 环形链表 进阶题142. 环形链表 II

 141. 环形链表

这道题还是用经典的快慢指针法来做。每次让快的指针走两步,慢的走一步。如果有环,则绝对会在环内的某一节点相遇。思想跟物理知识有点关系,如果有环,则在相对运动过程中,可以相当于慢指针静止,快指针每次走一步,那么最终肯定会相遇。这也是判断有环的条件。

若无环,则快指针在走的过程中,最后肯定会为null。这是判断无环的条件。

 算法代码

public class Solution {public boolean hasCycle(ListNode head) {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;}
}

运行结果

 

142. 环形链表 II

相比上一题,上个题只需要判断有环无环,此题在上个题的基础上还要返回链表开始入环的第一个节点。如果链表无环,则返回null。

思路就是当确定是有环的时候,再加入一个指向头结点的指针,此时让指向相遇点的指针和新加入的(指向头结点)的这两个指针,继续往后以相同“速度”往后走,直到“相遇”(指向同一个节点),此时所指的这个节点就是链表开始入环的第一个节点。

 算法代码

public class Solution {public ListNode detectCycle(ListNode head) {ListNode fast = head;ListNode slow = head;while(fast!=null && fast.next!=null){fast = fast.next.next;slow = slow.next;if(fast == slow) {ListNode node = head;  //新加入一个指向头结点的指针while(node != slow) {node = node.next;slow = slow.next;}return node; //返回slow也行}}return null;}
}

运行结果

 

http://www.lryc.cn/news/107913.html

相关文章:

  • MySQL索引1——基本概念与索引结构(B树、R树、Hash等)
  • TikTok数据分析 | 用好超店有数,生意增长快人一步
  • 从零开始学Docker(三):DockerFile镜像定制
  • 【Linux】 UDP网络套接字编程
  • 《golang设计模式》第一部分·创建型模式-05-工厂方法模式(Factory Method)
  • Kubernetes 概述
  • Electron + Vue3 + Vite + TS 构建桌面应用
  • springboot访问请求404的原因
  • 网络安全零基础该如何自学?
  • Git(丢失stash数据恢复)
  • Maven依赖管理
  • 【电网技术复现】考虑实时市场联动的电力零售商鲁棒定价策略(Matlab代码实现)
  • R语言中数据重塑(长宽表的转化)
  • C# Blazor 学习笔记(10):依赖注入
  • 接口请求(get、post、head等)详解
  • 【【萌新的STM32学习-4】】
  • C++ Primer Plus第五章 习题
  • 软考A计划-系统集成项目管理工程师-信息文档和配置管理-上
  • Vue 路由 路由守卫
  • 基于springboot的课程作业管理系统【附开题|ppt|万字文档(LW)和搭建文档】
  • 关于个人微信API接口的开发
  • 华为PMS API client token auth failed
  • 【Java面试丨消息中间件】Kafka
  • 7.数组(一维数组、二维数组、C99中的变长数组、二分查找法)
  • ubuntu服务器配置ftp服务
  • IDA+Frida分析CTF样本和Frid源码和objection模块
  • ConCurrentHashMap常见面试题
  • mysql数据备份并重置
  • I- yh的线段(2023河南萌新联赛第(四)场:河南大学)
  • python与深度学习(十四):CNN和IKUN模型二