Acwing 归并排序

374 阅读1分钟

148. 排序链表

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。

进阶:

你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?  

示例 1: image.png

输入:head = [4,2,1,3] 输出:[1,2,3,4]

示例 2: image.png

输入:head = [-1,5,3,4,0] 输出:[-1,0,3,4,5]

示例 3:

输入:head = [] 输出:[]  

提示: 链表中节点的数目在范围 [0, 5 * 104] 内 -105 <= Node.val <= 105

这个题的问题仍然没有很好的理解递归思路,把递归再想一想

思考:目前只能粗略记录思路

递归最适用于树和链表这种带着指针的,从中间拆出一个节点出来直接就是另一棵树或者另一个完整的链表,所以一棵树左右节点是两棵树,就把问题拆分了,一个链表中间拆一下变成两个链表,问题又拆分了。

递归和循环也就是动态规划是反着来的,如果能通过底层循环做的,一般上层递归也有的做。