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

力扣 hot100 Day37

25. K 个一组翻转链表

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

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

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

//抄的
class Solution {
public:ListNode* reverseKGroup(ListNode* head, int k) {if (!head || k == 1) return head;ListNode dummy(0);dummy.next = head;ListNode* prev_tail = &dummy;while (true) {ListNode* check = prev_tail->next;for (int i = 0; i < k; i++) {if (!check) return dummy.next; // 不足 K 个,直接返回check = check->next;}// 反转当前 K 个节点ListNode* curr_head = prev_tail->next;ListNode* prev = nullptr;ListNode* curr = curr_head;for (int i = 0; i < k; i++) {ListNode* next = curr->next;curr->next = prev;prev = curr;curr = next;}// 连接已反转部分prev_tail->next = prev; // 上一组的尾指向当前组的新头curr_head->next = curr; // 当前组的新尾指向剩余部分prev_tail = curr_head;  // 更新 prev_tail 为当前组的尾}}
};

处理太复杂了,难搞

逻辑先判断剩余节点是否足够,不够就直接返回保存的返回节点。如果足够,反转下面k个节点。反转结束,需要链接反转后的头到上一轮的尾,反转后的尾继续往后指。

不难得出,需要实时维护两个个指针,指向上一轮的尾和当前轮的旧头,这样才能避免链表断裂。

代码就是按上面的逻辑逐步实现的,下面对指针含义进行简要说明

dummy,虚头节点,可以视为第0轮反转后保存的尾部,dummy.next将指向第一轮反转后的头部

prev_tail,维护的前一轮反转后的尾部,开始即dummy,后面会实时变化

check,检测剩余节点个数的指针

curr_head,当前轮反转前的头,反转后的尾,最后赋值给prev_tail

prev,curr,next,正常反转就用到的指针,反转结束后,prev指向新头,curr指向下一轮

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

相关文章:

  • JVM基础01(从入门到八股-黑马篇)
  • vscode配置gitlab仓库详细步骤
  • Transformer模型架构深度讲解
  • web渗透之指纹识别1
  • 前端开发常见问题
  • Java开发面试核心知识点解析:从Redis缓存到内存模型全面解读
  • C++学习笔记01(自学草稿)
  • DeepSeek 帮助自己的工作
  • Spring的Bean原型模式下的使用
  • Java创建型模式---原型模式
  • 【C语言】指针与回调机制学习笔记
  • 【Java安全】反射基础
  • RoboRefer:面向机器人视觉-语言模型推理的空间参考
  • Web后端开发-分层解耦
  • Playfun即将开启大型Web3线上活动,打造沉浸式GameFi体验生态
  • 【ElasticSearch实用篇-01】需求分析和数据制造
  • turborepo 如何解决git管理包过大的问题
  • 病虫害数据集
  • 「Windows/Mac OS」AIGC图片生成视频 ,webui + stable-diffusion环境部署教程
  • AI编程才刚起步,对成熟的软件工程师并未带来质变
  • 【学习笔记】大数定理,频率与概率,均值与期望的区别
  • 深入解析TCP:可靠传输的核心机制与实现逻辑(三次握手、四次挥手、流量控制、滑动窗口、拥塞控制、慢启动、延时应答、面向字节流、粘包问题)
  • Java 命令行参数详解:系统属性、JVM 选项与应用配置
  • PCA通过“找最大方差方向”实现降维,本质是用更少的变量捕捉原始数据的主要模式
  • 3S技术+ArcGIS/ENVI全流程实战:水文、气象、灾害、生态、环境及卫生等领域应用
  • 深度学习7(梯度下降算法改进)
  • 使用Ideal创建一个spring boot的helloWorld项目
  • TMC4361A 使用(未验证)
  • 如何排查服务器中已经存在的后门程序?
  • 【应急响应】Linux 自用应急响应工具(LinuxCheckShoot)