解题思路:
由时间复杂度O(nlogn)知道我们可以使用归并排序
归并排序经常会出现在合并两个有序链表这样类似的题中
-
定义
fast指针和slow指针, 利用fast和slow将链表从中点分为两个链表
① 对应操作:
slow = slow.next;
fast = fast.next.next;
此时slow指针刚好停在链表的中点
② 将链表从中间断开的操作:
slow.next = null;
③ 此时左右两个断开的链表的第一个节点分别为head和tmp -
对左右两个断开的链表递归进行如下操作
操作为:
ListNode left = sortList(head);
ListNode right = sortList(tmp);
递归终止条件:head.next = null;, 意味着只剩下一个节点 -
将两个排序链表合并, 合并为一个排序链表
① 创建一个傀儡节点dum
② 创建指针left和指针right, 分别指向左右两个链表的头部, 比较两指针处节点值大小, 由小到大加入合并链表头部, 指针交替前进,

本篇博客探讨了如何使用归并排序算法对链表进行排序,详细讲解了将链表分成两部分、递归排序及合并排序链表的过程,提供了一种有效的链表排序解决方案。




415

被折叠的 条评论
为什么被折叠?



