news 2026/5/2 5:55:25

一个题目 带你了解快慢指针

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
一个题目 带你了解快慢指针

先看题:

line 链表是一个有序链表,现请你找出此链表的中间节点,
将此节点的值返回。

本题分为两种情况:

如果链表节点数是偶数,则取中间靠 左边/右边 的节点的值。

这是一道典型的算法例题:

常见思路
接下来便可以引入我们的快慢指针法

1. 快慢指针(Two Pointers with Different Speeds)

特点
  • 两个指针从同一位置开始

  • 移动速度不同(通常一个快,一个慢)

  • 常用于:链表操作、检测循环、找中点

  • 本篇文章 我们先对链表操作的找中点进行学习

  • 关键:需要根据题意“偶数时取靠右的节点”来调整结束条件

  • 这个算法的优势是只遍历链表一次,时间复杂度 O (n),空间复杂度 O (1),是找链表中间节点的极优解法。

  • 那么首先 做链表的题目时 我们应首先考虑该链表为空的情况:

  • if (head == null) { //提示链表为空 }
  • 接下来 便可以实现双指针算法
  • 中间靠右:

    public static int fun(Node line){ Node slow = line.next; Node fast = line.next; // 快指针初始和慢指针同位置 // 循环条件调整 while(fast!=null&&fast.next!=null){ slow = slow.next; fast = fast.next.next; } return slow.value; }

    中间靠左:

  • 我们可以通过延迟慢指针的移动时机来实现靠左效果,核心思路是:

  • 快指针每走 2 步,慢指针只走 1 步,但让慢指针 “晚一步开始走”。 或者 让快指针“先一步走”
  • 这样便可以实现 算法结束时慢指针的前移
  • public static int fun(Node line){ // 1. 初始化慢指针:指向第一个有效节点(跳过空的头结点) Node slow = line.next; // 2. 初始化快指针:指向第二个有效节点 Node fast = line.next.next; // 3. 循环移动指针: // - fast != null:防止快指针走到链表末尾(奇数个节点) // - fast.next != null:防止快指针的下一个节点为空(偶数个节点) while(fast!=null&&fast.next!=null){ slow = slow.next; // 慢指针走1步 fast = fast.next.next; // 快指针走2步 } // 4. 循环结束时,慢指针正好指向中间节点,返回其值 return slow.value; }

    总结

  • 核心实现逻辑:该函数采用快慢指针法(一次遍历最优解),慢指针每次走 1 步、快指针每次走 2 步,利用快指针先到达链表末尾的特性,让慢指针停在中间位置,时间复杂度 O (n)、空间复杂度 O (1)。
  • 初始位置关键作用:慢指针初始指向第一个有效节点,快指针初始指向第二个有效节点,这种初始位置差 1 步的设计,决定了偶数个节点时返回中间靠左的值(如 1,2,3,4 返回 2)、奇数个节点时返回正中间值(如 1,2,3,4,5 返回 3)。
  • 循环条件的意义fast!=null&&fast.next!=null同时兼顾奇数 / 偶数节点场景,既避免快指针直接走到 null(奇数),也避免快指针的下一个节点为 null 时执行fast.next.next引发空指针异常(偶数),是保证函数健壮性的关键。
  • 如果我的内容对你有帮助 还请点个赞 我会持续分享各种知识的!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 17:54:45

WSL2内核更新指南解决PyTorch兼容性问题

WSL2内核更新指南:解决PyTorch兼容性问题 在深度学习项目中,一个稳定的GPU加速环境几乎是刚需。然而,许多Windows开发者在使用WSL2运行PyTorch时,常常被“CUDA not available”这样的错误困扰——明明主机装了最新的NVIDIA驱动&a…

作者头像 李华
网站建设 2026/4/24 22:35:44

HuggingFace镜像网站+PyTorch-CUDA-v2.6:大模型加载更快更稳

HuggingFace镜像网站PyTorch-CUDA-v2.6:大模型加载更快更稳 在大模型开发日益普及的今天,你是否也经历过这样的场景:凌晨两点,实验跑了一半,模型却卡在 from_pretrained 这一行迟迟不动?或者好不容易拉下了…

作者头像 李华
网站建设 2026/4/30 23:03:31

arm64异常级别详解:以RK3588的安全监控模式为例

arm64异常级别详解:以RK3588的安全监控模式为例从一个实际问题说起你有没有遇到过这样的场景?在开发一款基于RK3588的智能终端时,系统需要实现指纹识别、安全支付或DRM内容解密。这些功能看似只是调用几个API,但背后却牵涉到复杂的…

作者头像 李华
网站建设 2026/4/24 22:35:29

从零实现工业温控系统的模拟电路基础知识总结示例

从零构建工业温控系统的模拟电路实战指南你有没有遇到过这样的场景:一个看似简单的温度控制系统,却在调试时读数跳动、响应迟钝,甚至持续振荡?明明用了高精度传感器,结果就是达不到预期效果。问题往往不出在算法上&…

作者头像 李华
网站建设 2026/5/2 0:37:30

RK3588中aarch64浮点运算单元启用操作指南

RK3588上如何真正“激活”aarch64的浮点算力?从寄存器到代码的实战解析你有没有遇到过这种情况:在RK3588开发板上跑一个图像滤波或AI推理程序,CPU占用率飙到90%以上,帧率却卡得像幻灯片?你以为是算法太重、模型太大&am…

作者头像 李华
网站建设 2026/5/1 16:33:26

直播停留超1小时的秘密:声网连麦打造沉浸式购物感

年终大促前,团队因后台流量数据陷入沉默:投放预算增加,直播间却留不住人,主播卖力叫卖,评论区冷清。同行低价竞争致用户审美疲劳,团队焦虑不已。我意识到叫卖行不通,用户需真实互动,…

作者头像 李华