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

25.K个一组翻转链表

   

在完成前置题目"92. 反转链表 II - 力扣(LeetCode)"的基础上,我们需要进一步考虑链表长度是否满足K个一组翻转的条件。若剩余链表长度不足K,则无需进行翻转。

具体实现步骤如下:

  1. 首先计算链表的长度
  2. 以K个节点为一组进行链表翻转。与92题不同的是,本题可能涉及多次翻转操作。每次翻转完成后,需要将已翻转部分与剩余链表进行正确衔接。

见下图

        

        翻转后的链表是怎么的出来的呢?接下来我们详细分解:

        第一步:翻转1,2

         

        理解第一步操作后,后续步骤基本相同。需要注意的是,在每组翻转前,需将 p0 移动到下一组翻转起始节点的前一个位置。以当前为例,下一组翻转的起始节点是 3,因此 p0 应移动到 1 的位置。值得注意的是,1 正是 p0->next 的指向。由于 p0->next 需要被修改(用于连接 1 和 3,即 p0->next->next = cur),同时 p0 需要指向当前的头节点 pre(即 p0->next = pre),因此需要特别关注这一操作。

        具体代码:

/*** 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* reverseKGroup(ListNode* head, int k) {ListNode *dummy = new ListNode(0,head);ListNode *p0 = dummy;ListNode *cur = head;int len = 0;while (cur){len++;cur = cur->next;}while (len >= k) {len -= k;ListNode *pre = nullptr;ListNode *cur = p0->next;for (int i = 1;i <= k;i++) {ListNode *nxt = cur->next;cur->next = pre;pre = cur;cur = nxt;}ListNode *nxt = p0->next;p0->next->next = cur;p0->next = pre;p0 = nxt;}ListNode *ans = dummy->next;delete dummy;return ans;}
};

         时间复杂度:O(n) n为链表的长度

        空间复杂度:O(1),仅用到若干额外的变量

http://www.xdnf.cn/news/383455.html

相关文章:

  • 2025年PMP 学习七 -第5章 项目范围管理 (5.4,5.5,5.6 )
  • 多线程获取VI模块的YUV数据
  • 21、DeepSeekMath论文笔记(GRPO)
  • 十七、统一建模语言 UML
  • Win11安装APK方法详解
  • Trex -用 Python生成特定的流量模式
  • C++:this指针
  • CMake 入门实践
  • 牛客练习赛138
  • 8.5 表格进阶
  • (四)毛子整洁架构(Presentation层/Authentiacation)
  • 批量修改json文件中的标签
  • 【MCAL】TC397+EB-tresos之I2c配置实战(同步、异步)
  • 2025年客运从业资格证备考单选练习题
  • Wallcraft 3.53.0 | 提供高质量动态4D壁纸,解锁高级版,无广告干扰
  • 《Python星球日记》 第50天:深度学习概述与环境搭建
  • 数据治理框架在企业中的落地:从理念到实践
  • OSPF案例
  • 完整进行一次共线性分析
  • Java代理
  • Android开发-图像显示
  • 如何通过合法数据变现实现收入增长
  • LVGL对象的盒子模型和样式
  • Arduino 开源按键库大合集(单击/双击/长按实现)
  • VB与Excel无缝连接实现指南
  • 编译后的js文件如何跟进调试
  • OpenAI的商业化之路:从非营利到盈利的转型
  • IC ATE集成电路测试学习——开尔文连接
  • 最速下降法和梯度下降法的异同
  • python基础(十一)-逻辑运算符