Hot100:排序链表(Sort List)链表归并排序 ACERS 解析
副标题 / 摘要 LeetCode 148 的核心不是“会排序”,而是“在链表结构里选对排序算法”。数组可随机访问适合快排/堆排,而单链表最匹配的是归并排序:找中点、递归分治、线性归并。 预计阅读时长:12~16 分钟 标签:Hot100、链表、归并排序、分治 SEO 关键词:Sort List, 排序链表, 链表归并排序, LeetCode 148, Hot100 元描述:用链表归并排序在 O(n log n) 内完成排序,覆盖思路推导、工程迁移、复杂度分析和多语言可运行实现。 目标读者 正在刷 Hot100,想把链表题模板系统化的同学 做链表题经常在“切分和拼接”环节出错的开发者 想搞清楚“为什么链表排序优先用归并”而不是快排的人 背景 / 动机 链表排序在工程里并不罕见: 合并来自多个来源的链式任务队列 对按时间追加的链式日志做离线整理 对内存敏感结构进行“尽量少拷贝”的重排 如果把数组排序思维直接搬过来,往往会遇到: 链表不支持 O(1) 随机访问,分区/堆操作代价高 频繁节点移动容易写出复杂且脆弱的代码 所以这题本质是:为链表选择正确的数据结构友好算法。 核心概念 分治(Divide & Conquer):把链表二分到最小子问题,再向上合并 快慢指针找中点:slow 每次 1 步,fast 每次 2 步 链表归并:两个有序链表线性拼接成一个有序链表 稳定排序:相等元素相对次序可保持 A — Algorithm(题目与算法) 题目还原 给你链表头节点 head,请将其按升序排序并返回排序后的链表。 要求时间复杂度为 O(n log n)。 输入输出 名称 类型 描述 head ListNode 单链表头节点(可能为空) 返回 ListNode 升序排序后的头节点 示例 1 输入: 4 -> 2 -> 1 -> 3 输出: 1 -> 2 -> 3 -> 4 示例 2 输入: -1 -> 5 -> 3 -> 4 -> 0 输出: -1 -> 0 -> 3 -> 4 -> 5 思路推导(从朴素到最优) 朴素做法:转数组再排序 遍历链表把值放到数组 调库排序后重建链表 问题: ...