No148。リンクリストの並べ替え
トピック
リンクリストのヘッドノードを指定します。昇順で並べ替えて、並べ替えられたリンクリストに戻ってください。
上級:
リンクリストを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
アイデア:
トラバースしてリストに保存し、並べ替え後に値を順番に再割り当てします。
問題解決コード(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)