【Leetcode】148。ソートリスト

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)

演算結果:

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/Xiao_Spring/article/details/113760139