链表排序只能用归并,因为快排需要随机访问

6 阅读1分钟

[> ******](## 一、为什么是归并不是快排

数组排序常用快排,因为数组 O(1) 随机访问。链表不行,链表不能 O(1) 找中间元素。

归并排序只需要两个操作:找中点(快慢指针)和合并有序链表(虚拟头节点)——这两个都是链表的强项。

二、核心代码

var sortList = function(head) {
    if (!head || !head.next) return head;
    const mid = getMid(head);
    const left = sortList(head);
    const right = sortList(mid);
    return merge(left, right);
};

三、总结

  1. 链表排序选归并不是快排
  2. 归并三步骤:快慢指针找中点 → 递归排序 → 合并
  3. 虚拟头节点简化合并逻辑)