No148. 排序链表
题目
给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。
进阶:
你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗?
示例1
- 输入:head = [4,2,1,3]
- 输出:[1,2,3,4]
示例2
- 输入:head = [-1,5,3,4,0]
- 输出:[-1,0,3,4,5]
示例3
- 输入:head = []
- 输出:[]
提示
- 链表中节点的数目在范围 [0, 5 * 104] 内
- -105 <= Node.val <= 105
思路:
遍历存入进List,然后经过排序后重新按序赋值。
解题代码(Python3)
class Solution:
def sortList(self, head: ListNode) -> ListNode:
#假设是对值排序 放到List里面排序之后再放入
p = head
result = []
while p:
result.append(p.val)
p = p.next
p = head
result.sort()
i = 0
while p:
p.val = result[i]
i += 1
p = p.next
return head
复杂度分析:
- 时间复杂度O(nlogn)
- 空间复杂度O(n)