news 2026/8/7 4:13:25

day131—链表—反转链表Ⅱ(区域反转)(LeetCode-92)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day131—链表—反转链表Ⅱ(区域反转)(LeetCode-92)

题目描述

给你单链表的头指针head和两个整数leftright,其中left <= right。请你反转从位置left到位置right的链表节点,返回反转后的链表

示例 1:

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

示例 2:

输入:head = [5], left = 1, right = 1输出:[5]

提示:

  • 链表中节点数目为n
  • 1 <= n <= 500
  • -500 <= Node.val <= 500
  • 1 <= left <= right <= n

解决方案:

这段代码的核心功能是反转单链表中指定区间 [left, right] 内的节点(比如原链表 1→2→3→4→5,left=2、right=4 时,反转后为 1→4→3→2→5),采用「迭代法 + 虚拟头节点」实现,时间复杂度O(n)、空间复杂度O(1),是区间反转链表的经典解法。

核心逻辑

代码通过 “定位反转起点 + 局部反转 + 重新连接” 三步完成区间反转,核心是用虚拟头节点规避头节点反转的边界问题:

  1. 虚拟头节点与定位前驱:创建虚拟头节点dx指向原链表头,先找到反转区间的前驱节点p0(即 left 位置的前一个节点),避免反转头节点时的空指针问题;
  2. 局部区间反转:以p0->next为起点,用pre/cur/nxt三个指针,迭代反转 [left, right] 范围内的节点(反转逻辑和完整反转链表一致);
  3. 重新连接链表:反转完成后,将原反转起点的节点(现在是反转区间的尾节点)指向反转区间后的第一个节点cur,再将p0指向反转区间的新头节点pre,恢复链表完整性;
  4. 返回结果:最终返回虚拟头节点的next(即新链表的头节点)。

总结

  1. 核心思路:用虚拟头节点简化边界处理,先定位反转区间前驱,再局部反转,最后重新拼接链表;
  2. 关键操作:反转后p0->next->next = curp0->next = pre是重新连接链表的核心,避免区间反转后链表断裂;
  3. 效率特点:一次遍历完成定位 + 反转 + 拼接,时间O(n)、空间O(1),是区间反转链表的最优解法。

函数源码:

/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: ListNode* reverseBetween(ListNode* head, int left, int right) { ListNode dx(0,head); ListNode* p0=&dx; for(int i=0;i<left-1;i++){ p0=p0->next; }//到达反转区域的前一个结点:p0 ListNode* nxt=nullptr; ListNode* pre=nullptr; ListNode* cur=p0->next;//反转的起始节点:p0->next for(int i=0;i<right-left+1;i++){ nxt=cur->next; cur->next=pre; pre=cur; cur=nxt; } p0->next->next=cur; p0->next=pre; return dx.next; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/31 20:50:59

一文搞懂大模型剪枝

一、什么是大模型剪枝&#xff1f; 通俗来讲&#xff0c;大模型剪枝就是识别并移除模型中“没用”或“用处极小”的部分&#xff0c;这些被移除的部分就是模型的“冗余成分”。 我们可以把大模型想象成一个精密的工厂&#xff0c;里面有无数条生产线&#xff08;对应模型的层、…

作者头像 李华
网站建设 2026/7/28 13:19:20

深度测评研究生必用8款一键生成论文工具

深度测评研究生必用8款一键生成论文工具 2026年研究生论文写作工具测评&#xff1a;精准匹配学术需求的高效助手 在当前学术研究日益精细化、智能化的背景下&#xff0c;研究生群体对论文写作工具的需求也愈发多元化。从选题构思到文献综述&#xff0c;从内容生成到格式排版&am…

作者头像 李华
网站建设 2026/8/6 1:57:00

RAG评估方法:优化检索增强生成系统的关键技术(值得收藏)

本文详细介绍了RAG&#xff08;检索增强生成&#xff09;系统的评估方法&#xff0c;包括检索评估&#xff08;精确度、召回率、F1分数&#xff09;和响应评估&#xff08;忠实度、答案相关性&#xff09;两大核心指标&#xff0c;以及人工与自动化评估方法。重点讲解了两个实用…

作者头像 李华
网站建设 2026/8/6 1:58:20

VP引导定位软件-平移九点标定TB

VP引导定位软件-平移九点标定TB一 加载图像private void materialButton19_Click(object sender, EventArgs e){OpenFileDialog openFileDialog new OpenFileDialog();if (openFileDialog.ShowDialog() DialogResult.OK){string filePath openFileDialog.FileName;m_ImageFi…

作者头像 李华
网站建设 2026/8/4 7:28:40

Java全栈工程师的面试实战:从基础到高阶的技术对话

Java全栈工程师的面试实战&#xff1a;从基础到高阶的技术对话 面试场景还原&#xff1a;技术与业务的深度融合 今天&#xff0c;我作为一位经验丰富的Java全栈开发工程师&#xff0c;正在参与一场针对互联网大厂的面试。这次面试的候选人是一位28岁的硕士毕业生&#xff0c;拥…

作者头像 李华
网站建设 2026/8/4 8:36:45

Kimi降AI vs 人工降重:效果、价格、速度三维度横向评测

Kimi降AI vs 人工降重&#xff1a;效果、价格、速度三维度横向评测 TL;DR&#xff1a;Kimi降AI效果有限&#xff0c;AIGC检测指数有时不降反升&#xff0c;因为AI改写依然带有明显的AI痕迹。人工降重效果稳定但耗时长、成本高。综合效果、价格、速度三个维度&#xff0c;专业降…

作者头像 李华