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

链表专题(二):乾坤大挪移——「反转链表」

场景想象:你是一队寻宝探险队的队长,队员们排成一列,每个人都把手搭在下一个人的肩膀上(1 -> 2 -> 3)。 现在命令来了:“全体向后转!”

  • 每个人都要松开搭在前面人肩膀上的手。

  • 每个人都要转身,把手搭在原本在自己后面那个人的肩膀上。

  • 原来的队长(头结点)变成了队尾,原来的最后一名变成了新队长。

核心痛点:链表是单向的,指针只能从前指到后。 如果我们想反转,就必须断开当前的指针cur.next,让它指向它的前一个节点pre。 但是!一旦我们断开了cur.next,我们就失去了去往下一个节点的路径。 所以,我们需要三个指针来配合这次“大挪移”。

力扣 206. 反转链表

https://leetcode.cn/problems/reverse-linked-list/

题目分析:

  • 输入:链表的头节点head

  • 目标:反转链表。

  • 输出:反转后的新头节点。

例子:1 -> 2 -> 3 -> 4 -> 5 -> NULL

  • 结果5 -> 4 -> 3 -> 2 -> 1 -> NULL

核心思维:双指针迭代法 (Pre & Cur)

我们需要两个主指针和一个辅助指针:

  1. cur(Current):当前操作的节点(初始为head)。

  2. pre(Previous):当前节点的前一个节点(初始为null,因为翻转后,原来的头结点后面是空)。

  3. temp(Temporary):临时保存cur的下一个节点(防止断链后找不到路)。

操作三部曲(在循环中):

  1. 保存路temp = cur.next(先记住下一个节点在哪,不然一会断开就丢了)。

  2. 反向指cur.next = pre(核心操作:把当前节点的指针指回前一个)。

  3. 整体挪

    • pre = cur(pre 指针向前挪一步)。

    • cur = temp(cur 指针向前挪一步,去处理下一个)。

代码实现 (JavaScript)

JavaScript

/** * Definition for singly-linked list. * function ListNode(val, next) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } */ /** * @param {ListNode} head * @return {ListNode} */ var reverseList = function(head) { // pre 初始化为 null,因为反转后的尾节点指向 null let pre = null; let cur = head; while (cur !== null) { // 1. 先保存下一个节点,否则一会断链了就找不到了 let temp = cur.next; // 2. 核心反转:让当前节点指向前一个节点 cur.next = pre; // 3. 两个指针同时向前移动,准备处理下一个 pre = cur; cur = temp; } // 循环结束时,cur 变成了 null,而 pre 正好停留在新的头节点上 return pre; };

深度模拟

假设链表:1 -> 2 -> 3 -> null

  • 初始pre=null,cur=1

  • 第一轮

    • temp = 2(记路)

    • 1.next = null(1 指向 null,变成尾巴了)

    • pre = 1,cur = 2(都前进一步)

    • 链表状态null <- 1,2 -> 3

  • 第二轮

    • temp = 3

    • 2.next = 1(2 回头指 1)

    • pre = 2,cur = 3

    • 链表状态null <- 1 <- 2,3

  • 第三轮

    • temp = null

    • 3.next = 2(3 回头指 2)

    • pre = 3,cur = null

  • 结束cur为空,返回pre(也就是 3)。

总结

这道题看似简单,但它是链表题的绝对核心

  • 面试技巧:在纸上画出pre,cur,temp三个指针的移动过程,会让你的思路非常清晰。

  • 记忆口诀“存下一步,回头指,双双向前挪”


下一题预告:两两交换链表中的节点

接下来我们要把难度稍微提升一点点。LC 24. 两两交换链表中的节点

  • 输入1 -> 2 -> 3 -> 4

  • 输出2 -> 1 -> 4 -> 3

  • 这道题不仅要反转指针,还要维护好节点之间的连接关系。如果说刚才是一个人向后转,现在就是两个人一组跳交谊舞交换位置。你需要同时操作 4 个指针!

准备好挑战一下你的逻辑清晰度了吗?

http://www.jsqmd.com/news/192312/

相关文章:

  • 水平直线振动筛安装调试内容及注意事项
  • HeyGem系统中的JavaScript交互逻辑解析:动态页面行为揭秘
  • 2026无人机建图识别新坐标:实时化、轻量化、集群化的关键演进 - 品牌2025
  • 基于MATLAB实现多变量高斯过程回归(GPR)
  • AI数字人视频制作新突破:HeyGem批量处理模式全流程解析
  • MR536修改调试串口
  • 链表专题(三):双人舞的艺术——「两两交换链表中的节点」
  • 苗木采购指南:值得关注的批发基地供应商,无刺枸骨球/金森女贞/红叶石楠/红叶李/国槐/白蜡,苗木批发基地供应商找哪家 - 品牌推荐师
  • 从音频到数字人视频:HeyGem系统实现一键口型同步生成
  • 简单理解:I2C 核心机制,ACK/NACK、NACK 标志计数器及自动 NACK 配置详解
  • phome_enewsdownurlqz 数据表字段解释(下载地址前缀表)
  • STM32F407 LCD开发终极指南:从硬件到Linux驱动迁移
  • 为什么你的C#网络程序总是丢包?彻底搞懂底层协议栈工作原理
  • 为什么顶尖开发者都在用C# 12顶级语句:5大优势全面剖析
  • 2026军用具身智能无人机蜂群系统发展前瞻:电子战迷雾中的智能突围 - 品牌2025
  • Reason合成器音乐作品配上HeyGem讲解视频传播
  • HeyGem系统支持哪些格式?音频与视频文件兼容性全面解读
  • 【ACM出版、往届见刊后1个月检索】第三届无人驾驶与智能传感技术国际学术会议(ADIST 2026)
  • Rode麦克风采集人声+HeyGem生成教学视频全流程
  • 快手主播打造AI数字人分身视频增粉攻略
  • IIS+Docker+CICD:C#企业系统现代化部署路径全解析,告别手动发布
  • 2025年地铁2号线川渝火锅必吃清单,生日聚会最佳选择,酸菜火锅/美食/天台火锅/川渝火锅/麻辣火锅nbsp;川渝火锅生日餐厅哪个好 - 品牌推荐师
  • Anker Soundcore系列性价比设备测试HeyGem输出
  • 2025年度抖音企业号运营服务商权威推荐,抖音代运营团队/企业号代运营/短视频运营公司/短视频获客/抖音代运营抖音企业号运营系统找哪家 - 品牌推荐师
  • Table SQL API 配置从“默认可用”到“针对场景调优”的一套方法论
  • LUT调色包下载后如何应用?优化HeyGem生成视频视觉效果
  • 推荐一家外贸独立站服务商 - 栗子测评
  • 删除选中视频功能使用说明:精准管理你的输入素材列表
  • Flink SQL 性能调优MiniBatch、两阶段聚合、Distinct 拆分、MultiJoin 与 Delta Join 一文打通
  • 气血不足免疫力低下?补气血吃什么最好最快?红参+阿胶双效调理,女人秋冬补气血的正确方法?和悦怡深度滋养 - 博客万