题目形容
在 O(nlogn) 工夫复杂度和常数级空间复杂度下,对链表进行排序。
示例 1:
输出: 4->2->1->3
输入: 1->2->3->4
崩溃思路
一、递归归并排序
1、应用快慢指针在两头节点将链表cut;
2、应用左右节点对cut后的链表进行递归cut;
3、递归终止条件:listnode.next = null;
4、对合成后的链表进行递归merge
二、链表转数组再回填(空间复杂度n,工夫复杂度nlogn)
1、将链表数据填入数组
2、对数组排序
3、将数值从新写入链表
语言积攒
1、应用快慢指针疾速查找链表的两头节点,须要留神对尾节点的判空,快慢指针在同一终点和快指针的初始地位在满指针的后面一个地位,有点区别
2、对数组递归cut的时候,留神递归的写法
3、递归merge的时候,返回节点及造成链表的形式有点意思
```
left.next = mergeList(left.next, right);
return left;
### vscode代码链接
[https://github.com/lunaDolphin/leetcode/tree/master/queue_linkedList_sortList_148](https://github.com/lunaDolphin/leetcode/tree/master/queue_linkedList_sortList_148)
[https://github.com/lunaDolphin/leetcode/tree/master/queue_linkedList_sortList_148_1](https://github.com/lunaDolphin/leetcode/tree/master/queue_linkedList_sortList_148_1)
发表回复