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

力扣——25 K个一组翻转链表

目录

1.题目描述:

2.算法分析:

3.代码展示:


1.题目描述:

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。

k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。

你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:

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

示例 2:

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

2.算法分析:

  1. 计算链表长度​​:

    • 首先遍历整个链表,统计节点的总数 n。这是为了知道有多少组 k 个节点需要反转。
  2. ​初始化辅助指针​​:

    • 使用一个虚拟头节点 dummy 可以简化操作,尤其是在处理头节点的反转时。
    • p 用于记录当前待反转子链表的前一个节点。
    • pre 和 cur 用于反转子链表。
  3. ​分组反转​​:

    • 只要剩余的节点数 n 大于等于 k,就进行反转:
      • 反转连续的 k 个节点:
        • 使用类似反转单链表的方法,逐个反转节点。
      • 调整连接:
        • 将反转后的子链表与前面的部分连接起来。
        • 将反转后的子链表的尾部与下一个子链表的头部连接。
        • 移动 p 到下一个待反转子链表的前一个节点。
  4. ​处理剩余节点​​:

    • 如果剩余的节点数不足 k,则不进行反转,直接保留原顺序。
  5. ​返回结果​​:

    • 由于 dummy 的 next 始终指向链表的头节点,因此返回 dummy->next

示例

假设链表为 1 -> 2 -> 3 -> 4 -> 5k = 2

  1. 计算长度 n = 5
  2. dummy -> 1 -> 2 -> 3 -> 4 -> 5
  3. 第一组反转 1 和 2
    • 反转后:2 -> 1cur 指向 3
    • 调整连接:dummy -> 21 -> 3
    • p 移动到 1
  4. 第二组反转 3 和 4
    • 反转后:4 -> 3cur 指向 5
    • 调整连接:1 -> 43 -> 5
    • p 移动到 3
  5. 剩余 n = 1,不足 k,不反转。
  6. 最终链表:2 -> 1 -> 4 -> 3 -> 5

3.代码展示:

ListNode* reverseKGroup(ListNode* head, int k) {int n = 0; // 代表节点的个数// 计算出链表节点的个数for (ListNode* cur = head; cur; cur = cur->next) {n++;}// 创建一个空节点,便于后续的操作ListNode* dummy = new ListNode(0, head);ListNode* p = dummy;ListNode* pre = nullptr;ListNode* cur = head;for (; n >= k; n-=k) {for (int i = 0; i < k; i++) {// 进行翻转操作ListNode* nex = cur->next;cur->next = pre;pre = cur;cur = nex;}if (p->next == nullptr) {return 0;}ListNode* temp = p->next;p->next->next = cur;p->next = pre;p = temp;}return dummy->next;}

25. K 个一组翻转链表 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-nodes-in-k-group/

相关文章:

  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】7.3 动态报表生成(Jupyter Notebook/ReportLab)
  • python批量配置交换机简单实现
  • 场景可视化与数据编辑器:构建数据应用情境​
  • 居民健康监测小程序|基于微信小程序的居民健康监测小程序设计与实现(源码+数据库+文档)
  • OSCP - Proving Grounds - Sumo
  • 深度学习中常见的矩阵变换函数汇总(持续更新...)
  • 尚硅谷-硅谷甄选项目记录
  • 【2019 CWE/SANS 25 大编程错误清单】12越界写入
  • 二叉平衡树
  • 【解决方案】CloudFront VPC Origins 实践流程深入解析 —— 安全高效架构的实战之道
  • 格雷狼优化算法`GWO 通过模拟和优化一个信号处理问题来最大化特定频率下的功率
  • Node.js vs 浏览器中的JavaScript:区别全解析
  • 【计算机视觉】OpenCV实战项目:Long-Exposure:基于深度学习的长时间曝光合成技术
  • 【大模型ChatGPT4+Python】数据分析与可视化、人工智能建模及论文高效撰写
  • ECMAScript 2016(ES2016):JavaScript 生态的精细化完善
  • Kubernetes生产级资源管理实战:从QoS策略到OOM防御体系
  • SAP BC 私有云用户安全策略的问题
  • C#与Halcon联合编程
  • 【今日三题】跳台阶扩展问题(找规律) / 包含不超过两种字符的最长子串 / 字符串的排列(回溯—全排列)
  • DeepSeek架构解析:从神经动力学视角解构万亿参数模型的认知涌现机制
  • 重温经典|开播20周年,仙剑的那些幕后你知道吗?
  • 央行最新报告:积极落地5月推出的一揽子金融政策,促进经济供需平衡、物价合理回升
  • 2025世界数字教育大会将于5月14日至16日在武汉举办
  • 中国象棋协会坚决支持司法机关依法打击涉象棋行业的违法行为
  • “一嗨租车”陷“五年后扣费”疑云,用户:违章处理莫名消失
  • 迪拜金融市场CEO:2024年市场表现出色,超八成新投资者来自海外