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

面试热题(环形链表II)

给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next 指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意,pos 仅仅是用于标识环的情况,并不会作为参数传递到函数中。

 

以前做题的时候,也是关于这种类型的题,觉得很不错,想和大家分享一波

 好,言归正传,我们来开始这道题的分析

       这种类型题技巧性也是非常强的,只有出现环形这种字眼,一般都是声明两个指针,一个快、一个慢,不断走的过程中,这两个点终会相遇,就好比操场跑步(现在来设置一个情景题):

       有一点小渣和老渣去跑步,老渣可是出了名的时间管理大师,因为这,身体一直不好,所以老渣跑步的速度一直比小渣慢,两个同时从起点出发,最后小渣和老渣在操场中再一次相遇

 因为老渣因为某种原因,身体每况愈下,但是正因为操场是一个环状,所以两个还能再次相遇

所以我们可以先通过这个环状的特点,去找到该链表快慢指针第一次相遇的地方

        ListNode fast=head;ListNode slow=head;while(fast!=null&&fast.next!=null){fast=fast.next.next;slow=slow.next;if(fast==slow){break;}}

我们再来研究研究怎么去找环形的入口

 所以我们就可以写出代码:

 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){break;}}if(fast==null||fast.next==null){return null;}slow=head;while(slow!=fast){slow=slow.next;fast=fast.next;}return slow;}

 

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

相关文章:

  • 策略模式:优雅地实现可扩展的设计
  • 从8个新 NFT AMM,聊聊能如何为 NFT 提供流动性
  • 习题1.27
  • 简单游戏截图_可控截取内容2
  • 跨域+四种解决方法
  • RW-Everything的RwDrv.sys驱动调用
  • 0101docker mysql8镜像主从复制-运维-mysql
  • uC-OS2 V2.93 STM32L476 移植:系统启动篇
  • redis 集群 1:李代桃僵 —— Sentinel
  • 重置 Macbook 中MySQL 的 root 用户密码
  • 2308C++搞笑的概念化
  • 修改node_modules里的源码
  • 【每日一题Day287】LC24 两两交换链表中的节点 | 模拟 递归
  • Java ~ Collection/Executor ~ PriorityBlockingQueue【源码】
  • Java后台生成微信小程序码并以流的形式返回给前端
  • AtcoderABC226场
  • Linux知识点 -- VS Code远程连接服务器协助开发
  • blender基础认识(选项开关、工具栏、视图等)
  • React Hooks 中的属性详解
  • 工作遇到问题与解决办法(一)
  • 综合与新综合与新型交通发展趋势[75页PPT]
  • 【树形DP+换根思想】2022牛客多校加赛 H
  • Gitlab CI/CD笔记-第二天-GitOps的流水线常用关键词(1)
  • Spring Boot3.0(一):入门篇
  • 各种排序333
  • [C++] 类与对象(中)完整讲述运算符重载示例 -- 日期类(Date) -- const成员
  • wonderful-sql 作业
  • Go学习第六天
  • opencv-34 图像平滑处理-2D 卷积 cv2.filter2D()
  • Java 克隆技术详解,深拷贝与浅拷贝的区别及实现