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

力扣HOT100(31)K 个一组翻转链表

整体大思路:

把链表按 k 个节点分成一组一组,对每一组单独翻转,然后把翻转后的组和前后的组重新连接起来,最后不足 k 个的组不翻转。

我们只需要解决 3 个小问题:

  1. 怎么判断剩下的节点够不够 k 个?
  2. 怎么翻转一组 k 个节点?
  3. 怎么把翻转后的组和前后的组连接起来?

步骤 1:判断剩余节点是否够 k 个

我们用一个tail指针,从当前组的前驱节点pre开始,往前走 k 步:

  • 如果能走完 k 步,说明剩余节点够 k 个,可以翻转
  • 如果走不到 k 步就到nullptr了,说明不够,直接结束

步骤 2:翻转一组 k 个节点

这是 206 题「反转链表」的变种,我们需要翻转从headtail的子链表,并且返回翻转后的新头和新尾,方便后面连接。

步骤 3:把翻转后的组重新连接起来

这是这道题最关键的一步,翻转前一定要先保存下一组的头节点,不然会断链!

固定 4 步连接逻辑:

  1. 保存下一组的头:ListNode* nex = tail->next;
  2. 翻转当前组,得到新头和新尾:tie(newHead, newTail) = reverse(head, tail);
  3. 上一组的尾指向新头:pre->next = newHead;
  4. 新尾指向下一组的头:newTail->next = nex;

然后更新指针,准备处理下一组:

  • pre = newTail;(下一组的前驱是当前组的新尾)
  • head = nex;(下一组的头是之前保存的 nex)
  • /** * 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: //写一个pair类型的 函数 翻转一个子链表,并返回新的头和尾 //pair容器用于存放成对出现的 可以返回新生成的pair.first pair.second pair<ListNode*,ListNode*> myReverse(ListNode* head,ListNode* tail){ ListNode* prev = tail->next; ListNode* p = head; while(prev != tail){ //反转链表 ListNode* nex = p->next;//p的下一个存在nex中 p->next = prev; prev = p; p = nex; } return {tail,head};//返回新的头 和尾巴 } ListNode* reverseKGroup(ListNode* head, int k) { ListNode* hair = new ListNode (-1,head); ListNode* pre = hair; while(head){ ListNode* tail = pre;//尾指针 用来判断剩余部分还有k个吗。初始在虚拟头 for(int i = 0; i<k;i++){ tail = tail->next;//tail一直往前走 if(tail == nullptr){//走到空说明不满足k步了 直接返回 终止循环 return hair->next; } } //现在就是满足k步的 ListNode * nex = tail->next;//tail现在的位置在第k个元素 //接下来调用函数 进行翻转 tie(head, tail) = myReverse(head, tail); //子链表重新接回去 pre->next = head; tail->next = nex; pre = tail;//用来存放下一组头的前驱 head = tail->next;//开始前移 } return hair->next; } };
http://www.jsqmd.com/news/893770/

相关文章:

  • 2026年 山东健康调料厂家推荐排行榜:有机/零添加/复合/轻食/儿童/网红及餐饮定制品牌深度解析 - 品牌企业推荐师(官方)
  • 初创APP用户量少,有必要提前部署DDoS防护吗?
  • Lattice LFCPNX-100 HSB+Fpga开发详解:2.2 Marvell MV-Q3244 Phy的Podl电路详解
  • Surface Pro 7/8 保姆级教程:不关Secure Boot,搞定Arch Linux双系统与触屏驱动
  • 让AI助手从翻车到carry的实战指南
  • 企业知识库的升级,不是把文档放一起,而是把知识变成能力
  • 别再乱找了!2026年PDF转Excel指南,一键提取表格数据 - 时时资讯
  • 免费又高效:2026年PDF转图片(JPG/PNG)完整指南 - 时时资讯
  • 保姆级教程:在Ubuntu 22.04上从源码编译安装LTP测试套件(含依赖包清单)
  • 【论文解析】CoPCS — 让无人机与无人车“心有灵犀“的协同规划框架
  • 智能驾驶的“眼睛”:视觉摄像头技术全景解读与实战指南
  • 别再用2024旧榜单做采购决策!2026真实工作流压力测试:17个企业级任务,仅4款工具全项达标
  • Python接口测试实战之搭建自动化测试框架
  • 2026年Q2乐山可靠正宗跷脚牛肉:乐山美食排行榜/乐山美食探店/乐山美食推荐/乐山美食攻略/乐山美食有哪些/乐山美食街/选择指南 - 优质品牌商家
  • 氨水电磁流量计怎么选?靠谱生产厂家推荐
  • 激光雷达:智能驾驶的“火眼金睛”,技术、应用与未来全解析
  • 2026热门水泥烟道供应商名录:厨房烟道/密封防火胶/小区烟道/居民楼烟道/屋面烟道/建筑烟道/楼房烟道/消防烟道/选择指南 - 优质品牌商家
  • 为什么大额交易者与高频散户,都盯上了“交易所标准+自定义保证金”?
  • DTOP环球嘉年华重构线下商业版图|2026实体商家联盟化趋势解读
  • AI数字员工养成术:6步带出业务骨干
  • 东莞硅胶制品定制完整流程,小白也能一次看懂
  • LBS 开发选型参考:滴图全栈地图服务能力与多行业落地实践
  • Windows脚本编程避坑指南:Wscript.Shell的Run方法和环境变量那些事儿
  • 初次使用 Taotoken 模型广场进行模型选型与测试的流程体验
  • 告别卡顿!从X11迁移到Wayland:一个桌面开发者的真实体验与避坑指南
  • FT8440AD-DRB 与PN8034/PN8036、KP3221/KP3222/KP3281对比 能否兼容?
  • 别再手动改写!用这6个嵌套式Prompt链,让ChatGPT自动生成符合出版级审校标准的创意文本
  • AI Agent 工具集:星瀚云面向五大人群的场景智能体
  • 2026年环氧涂层加强筋螺旋焊管TOP5品牌客观盘点:不锈钢加强筋瓦斯抽放管/不锈钢加强筋螺旋焊管/不锈钢瓦斯管/选择指南 - 优质品牌商家
  • 2026年5月,青岛企业管理者与个体执业者如何选择可靠的心理咨询师培训平台? - 2026年企业资讯