利用归并的思想去排序链表.
特别是bottom to up
还是很有难度的.
148. 排序链表
在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
1
2
3 >输入: 4->2->1->3
>输出: 1->2->3->4
>
示例 2:
1
2
3 >输入: -1->5->3->4->0
>输出: -1->0->3->4->5
>
方法1 递归的merge
思路可以参考合并链表
1 | class Solution { |
方法2 非递归的merge (up to bottom)
时间复杂度: O(nlogn)
空间复杂度:o(n)
(算上递归用的栈空间)
1 | /** |
方法3 非递归的merge(bottom to up)
由于没有使用递归和额外空间所以空间复杂度是O(1)
, 时间复杂度为O(nlogn)
1 | // 要手动模拟split的过程 |