LeetCode 92 反转链表 II 全流程详解

题目描述

给定一个单链表的头节点 head 和两个整数 leftright,反转链表中从位置 leftright 的节点,并返回反转后的链表。要求只用一次遍历。

示例:

  • 输入:head = [1,2,3,4,5], left = 2, right = 4
  • 输出:[1,4,3,2,5]

约束条件:

  • 1 ≤ n ≤ 500(n为节点个数)
  • -500 ≤ Node.val ≤ 500
  • 1 ≤ left ≤ right ≤ n

常见思路与分析

1. 借助栈法

利用栈或数组暂存区间节点或者指针,然后两两配对交换节点值。这种方法本质上是"空间换时间",但每对节点都需要遍历链表两次,效率相对较低,且空间复杂度 O(k)(k为区间长度)。原链表结构未改变,缺乏链表操作的"原地特性"。

2. 双指针遍历法

每次从头分别定位到 leftright,再交换节点值,并不断推进 left++right--。这种方式直观易懂,但每次都要重新从头定位,整体时间复杂度达到 O(k²),不适合区间较大的情况。

3. 一次遍历,原地反转指针(官方最佳)

官方推荐和面试官最欣赏的是只用一次遍历、原地反转指针的方案。


最佳解法思路

找到反转区间边界节点

用指针遍历链表直到第 left-1 个节点(记为 pre),和 left 节点(记为 start)。

原地反转 [left, right] 区间指针

每次将当前节点 curnext 指向 pre,实现链表反转。

缓存关键指针保存连接关系

  • 区间前的 pre
  • 区间头 start(反转后变为尾)
  • 反转后的区间头 end
  • 区间后的 next

反转后接回原链表

复制代码
pre->next = end
start->next = next

总结与收获

  1. 链表题的核心在于理解指针和前后关系,找准"断点"并连接复原
  2. 面试时建议用 dummy node 防止 left=1 的特殊情况,让代码更健壮
  3. 这种方法只需一次遍历,空间 O(1) 原地操作
  4. 画图、写 down 链表节点,理清区间四端的指向关系,是高效解题的关键

你只要理解"反转区间链表的四段连接",无论什么变体题型,都能轻松应对!


参考链接

相关推荐
风筝在晴天搁浅4 分钟前
字节高频题 小于n的最大数
算法
LabVIEW开发6 分钟前
LabVIEW水力机组空蚀在线监测
算法·labview·labview知识·labview功能·labview程序
AI科技星11 分钟前
科幻艺术书本封面:《全域数学》第一部·数术本源 第三卷 代数原本(P95-141)完整五级目录【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
风筝在晴天搁浅13 分钟前
LeetCode 92.反转链表Ⅱ
算法·leetcode·链表
王老师青少年编程27 分钟前
csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:数列分段 Section II
c++·算法·贪心·csp·信奥赛·二分判定·数列分段 section ii
V搜xhliang02461 小时前
OpenClaw科研全场景用法:从文献到实验室的完整自动化方案
运维·开发语言·人工智能·python·算法·microsoft·自动化
汉克老师1 小时前
GESP2025年3月认证C++五级( 第三部分编程题(2、原根判断))
c++·算法·模运算·gesp5级·gesp五级·原根·分解质因数
数据皮皮侠1 小时前
上市公司创新韧性数据(2000-2024)|顶刊同款 EIR 指数
大数据·人工智能·算法·智慧城市·制造
WL_Aurora1 小时前
Python 算法基础篇之链表
python·算法·链表
科研前沿2 小时前
纯视觉无感解算 + 动态数字孪生:室内外无感定位技术全新升级
大数据·人工智能·算法·重构·空间计算