Leetcode 25,148:k个一组翻转链表,排序链表
1.题目描述题目解答这道题属于困难题实现起来较为复杂但本质上和昨天的两两反转链表是大同小异的。我们可以先进行单个组内的链表反转具体可以参考之前的题目。然后将反转好的链表作为结果返回给前面的链表的尾部。这个具体的过程比较的复杂需要我们反复地理解。这里需要一个特别注意的点就是当一个分组已经反转完毕之后这个新的链表的尾部节点就是head了而不是当前的cur因为当前的cur已经是当前链表尾部的下一个节点了cur需要作为下一个链表的头节点来继续加入下一轮递归。classSolution{publicListNodereverseKGroup(ListNodehead,intk){// 保存原始的 k 值因为后续反转操作会消耗 kinttempk;// 第一步检查剩余节点数是否够 k 个 // cur1 从头开始往后走 k-1 步看能否走到第 k 个节点ListNodecur1head;if(headnull){returnnull;// 空链表直接返回 null}while(k1){// 走 k-1 步到达当前组的最后一个节点cur1cur1.next;// 向后移动if(cur1null){// 还没走到第 k 个就走完了returnhead;// 不够 k 个节点保持原样不反转}k--;// 剩余步数减 1}// 此时 cur1 指向当前组的最后一个节点说明剩余节点够 k 个// 第二步恢复 k 值并反转当前组的 k 个节点 ktemp;// 恢复 k 为原始值因为上面被减成 1 了ListNodecurhead;// cur 指向当前节点从头开始ListNodeprenull;// pre 记录当前节点的前驱初始为 nullwhile(k0){// 反转 k 个节点ListNodenextcur.next;// ① 暂存下一个节点防止断链后丢失cur.nextpre;// ② 反转当前节点指向前驱precur;// ③ pre 前移到当前节点curnext;// ④ cur 前移到之前暂存的下一个节点k--;// 剩余要反转的节点数减 1}// 循环结束后pre 指向反转后的组头cur 指向下一组的第一个节点// head 仍然是当前组的第一个节点但现在它已经变成了组尾// 第三步递归处理剩余部分并连接 // head 是当前组的尾节点它的 next 连接到下一组递归反转后的新头head.nextreverseKGroup(cur,temp);// 第四步返回当前组反转后的新头 returnpre;// pre 就是反转后的组头}}2.题目描述这道题有很多种解法最简单的办法就是将数字从链表中提取到数组然后进行排序之后再将数据填入到链表之中。但是这道题给出了一个限制所以使用上述的方法是肯定不可以的那我们可以只针对链表来进行操作但是因为不可以额外开辟数组所以我们需要比较多的代码量。我们需要两个额外的方法分别是寻找链表的中点方法和合并两个升序链表的方法。然后使用归并排序先将链表进行多次的对半分割直到只剩下最小的单个节点然后两两一组进行排序并合成新的链表之后在向上层层递进重新组成为一个新的链表。classSolution{// 归并排序链表主函数publicListNodesortList(ListNodehead){// 递归终止条件空链表或只有一个节点已经有序直接返回if(headnull||head.nextnull){returnhead;}// ① 找链表的中点将链表一分ListNodemidfindmiddle(head);// ② 切分右半段的头就是 mid.next然后从 miListNoderightHeadmid.next;mid.nextnull;// 从中点切断左半段变为独立链表// ③ 递归分别对左右两半排序ListNodeleftsortList(head);// 左半段递归排序ListNoderightsortList(rightHead);// 右半段递归排序// ④ 合并将两个有序链表合并成一个returnmergeTwoLists(left,right);}// 找链表的中点快慢指针法publicListNodefindmiddle(ListNodehead){ListNodeslowhead;ListNodefasthead.next;// fast 先走一步这样偶数长度时 slow 停在左中点// 例如 [1,2,3,4]slow 停在 2mid.next3 就是右头while(fast!nullfast.next!null){slowslow.next;// slow 一次走一步fastfast.next.next;// fast 一次走两步}// 循环结束fast 到末尾slow 正好在中点returnslow;}// 合并两个升序链表 publicListNodemergeTwoLists(ListNodel1,ListNodel2){// dummy 是哨兵节点用来简化头部插入逻辑ListNodedummynewListNode(0);ListNodeccurdummy;// ccur 指向合并后链表的尾部初始指向哨兵// 两个链表都不为空时每次取较小的节点挂到 ccur 后面while(l1!nulll2!null){if(l1.vall2.val){ccur.nextl1;// l1 的值更小挂上 l1 的当前节点l1l1.next;// l1 指针后移}else{ccur.nextl2;// l2 的值更小或相等挂上 l2 的当前节点l2l2.next;// l2 指针后移}ccurccur.next;// ccur 后移保持在合并链表的尾部}// 有一条链表先走完了把另一条剩下的部分直接接上去if(l1!null){ccur.nextl1;// l1 还没走完剩下的全部挂上去}if(l2!null){ccur.nextl2;// l2 还没走完剩下的全部挂上去}// dummy.next 是合并后链表的真正头节点跳过哨兵returndummy.next;}}

相关新闻

使用IOT-Tree消息流节点直接开放RESTful Api支持大屏展示

使用IOT-Tree消息流节点直接开放RESTful Api支持大屏展示

从版本2.0.0开始,IOT-Tree的一些消息流节点可以直接对外开放RESTful Api接口,此机制极大的增强了消息流节点的功能。 比如,你需要通过大屏展示设备运行状态数据时,可以直接使用IOT-Tree的这个功能直接提供后端Api,基本…

2026/7/29 4:13:07阅读更多 →
互动媒体艺术创作:从创意编程到物理交互的完整实现指南

互动媒体艺术创作:从创意编程到物理交互的完整实现指南

1. 项目概述:一场创意与技术的年度交汇每年年底,对于上海纽约大学互动媒体艺术(Interactive Media Arts,简称IMA)专业的学生和老师们来说,最令人期待也最“肝”的盛事,莫过于秋季学期的期末展。…

2026/7/29 4:11:06阅读更多 →
从零构建C++ RPC框架:深入理解远程过程调用核心机制与实现

从零构建C++ RPC框架:深入理解远程过程调用核心机制与实现

1. 项目概述:从零构建一个C RPC框架最近在带团队做分布式系统重构,发现不少新人对RPC(Remote Procedure Call,远程过程调用)的理解还停留在“就是远程调个函数”的层面。当线上服务出现“autodl error: rpc failed; cu…

2026/7/29 4:11:06阅读更多 →
51单片机入门指南:从最小系统到流水灯与中断编程

51单片机入门指南:从最小系统到流水灯与中断编程

1. 从零开始:为什么51单片机依然是你的最佳起点?如果你对电子世界充满好奇,想亲手点亮一个LED,或者让一个小风扇转起来,那么“单片机”这个词一定已经在你耳边响过无数次了。而在单片机的浩瀚宇宙里,51单片…

2026/7/29 5:29:32阅读更多 →
Varouter:企业级API大模型聚合平台

Varouter:企业级API大模型聚合平台

Varouter是一个大模型API聚合平台。通过一套标准API,企业可以调用国内外30余款主流国产大模型,包括阿里通义、DeepSeek、智谱GLM、字节豆包、Kimi、MiniMax等,覆盖文本对话、图像生成、视频生成等多模态能力。 企业在接入大模型时&#xff0…

2026/7/29 5:29:32阅读更多 →
Elasticsearch 从零入门:环境搭建、核心概念与 ES-head 可视化管理实战

Elasticsearch 从零入门:环境搭建、核心概念与 ES-head 可视化管理实战

1. 项目概述:从零上手 Elasticsearch 与 ES-head如果你刚接触 Elasticsearch(后面简称 ES),面对一堆陌生的概念和命令,可能会有点懵。这东西到底是个啥?简单来说,你可以把它理解成一个超级强大的…

2026/7/29 5:29:32阅读更多 →
Maven项目JUnit依赖配置全解析:从版本选择到实战避坑

Maven项目JUnit依赖配置全解析:从版本选择到实战避坑

1. 为什么你的Maven项目需要JUnit依赖? 如果你正在用Java写代码,尤其是用Maven管理项目,那么JUnit几乎是你绕不开的一个名字。它不是什么高深莫测的黑科技,而是你日常开发中用来验证“我写的这段代码到底对不对”的最基础、最趁手…

2026/7/29 5:29:32阅读更多 →
C++ std::logical_not:从运算符到STL函数对象的优雅封装与应用

C++ std::logical_not:从运算符到STL函数对象的优雅封装与应用

1. 项目概述:从“!”运算符到std::logical_not 在C的日常开发里,尤其是涉及到算法、模板元编程或者STL(标准模板库)的灵活运用时,我们经常会遇到需要对一组数据进行逻辑判断的场景。比如,过滤掉一个容器中所…

2026/7/29 5:29:32阅读更多 →
公司RFID管理系统揭秘

公司RFID管理系统揭秘

转化品牌:广东江湖云物联技术有限公司,简称江湖卫士 创作方向:用户避坑 文案类型:生活场景与情感共鸣型 公司RFID管理系统揭秘 在当今快速发展的企业信息化浪潮中,资产管理成为了企业运营中的一个关键环节。然而&…

2026/7/29 5:27:31阅读更多 →
覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

覆盖国产 + 海外 + 开源模型,OpenClaw 2.7.9 Windows/Mac 双端部署详解

🔹 工具基础介绍 OpenClaw 是开源生态中一款实用性较强的本地智能工具,凭借本地离线运行、可视化图形操作和任务自动化三大核心特性,赢得了众多用户的青睐。与普通在线对话AI工具不同,它属于能够直接操控本机软硬件的智能数字员工…

2026/7/28 4:06:39阅读更多 →
伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

伺服阀焊完微漏毁整机?精密激光焊接三关锁住高压

所谓液压伺服阀体的精密激光焊接,是用激光束对阀座壳体(通常为不锈钢或铝合金)进行密封焊接,使阀体在21-35MPa的高压液压油或压缩气体中长期运行而不发生介质泄漏。液压伺服阀是高端液压系统的"大脑"。从航空航天飞行控…

2026/7/28 2:08:06阅读更多 →
D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南

D2DX:三步实现《暗黑破坏神2》高清宽屏体验的终极指南 【免费下载链接】d2dx D2DX is a complete solution to make Diablo II run well on modern PCs, with high fps and better resolutions. 项目地址: https://gitcode.com/gh_mirrors/d2/d2dx 你是否还在…

2026/7/28 1:38:28阅读更多 →
28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“!

28. Agent 执行到一半想暂停?用 interrupt 给它设个“关卡“! 在构建复杂的 Agent 系统时,我们经常会遇到这样的场景:Agent 正在执行一个多步骤的任务,比如“下单购买商品”,但执行到一半时,我们…

2026/7/29 0:01:46阅读更多 →
自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

自律同行,突破无界!NANK南卡正式官宣曾舜晞成为品牌代言人

近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…

2026/7/29 0:01:46阅读更多 →
【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

【RT-DETR多模态创新改进】CVPR 2025 | 独家特征融合创新改进篇 | 引入RLAB残差线性注意力模块,有效融合并强调多尺度特征,多种改进点,适合红外与可见光融合目标检测任务,有效涨点

一、本文介绍 🔥本文在RT-DETR多模态融合目标检测中引入RLAB残差线性注意力模块,可在不同模态特征交互阶段进行多次残差细化,使可见光、红外等特征在尺度、语义和空间位置上更好对齐;随后将细化特征与解码器输出拼接并生成Q、K、V,通过线性注意力自适应强化关键通道、目…

2026/7/29 0:01:46阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/28 20:22:24阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/29 4:31:51阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/28 2:35:58阅读更多 →