剑指 Offer II 077. 链表排序
给定链表的头结点 head
,请将其按 升序 排列并返回 排序后的链表 。
示例 1:
1 | 输入:head = [4,2,1,3] |
示例 2:
1 | 输入:head = [-1,5,3,4,0] |
示例 3:
1 | 输入:head = [] |
提示:
- 链表中节点的数目在范围
[0, 5 * 104]
内 -105 <= Node.val <= 105
解法1:借助数组
流程:
- 遍历链表将链表中的元素存入数组
- 对数组排序
- 再次遍历链表和数组,将排好序的元素存入链表中
代码实现:
1 | public ListNode sortList(ListNode head) { |
解法2:归并排序
流程:
- 通过快慢指针找到当前链表的中心节点,在此处将链表断开
- 递归对两边链表进行排序
- 归并合并两个有序链表(合并两个有序链表)
1 | public ListNode sortList(ListNode head) { |