Menu
CoddyTech

Sort List

同じ長さの2つの配列に格納された単方向連結リストが与えられます。ノード i は値 values[i] を持ち、ノード next[i] へのリンクを持ちます。-1 はリストの末尾を示し、先頭ノードは 0 です。ノードはリストの順序どおりには格納されておらず、配列には、ノード 0 からたどっても到達しない残存ノードが含まれている場合もあります。リンクがリスト内のノードを指していても、それらはリストの一部ではありません。

値の非減少順にリストを並べ替え、その順序でノードの値を返してください。

関数

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
各ノードがリンクするノードのインデックス、または最後のノードの場合は -1
valuesinteger-array
各ノードが保持する値
戻り値integer-array
リストのノードの値を小さい順に

制約

  • 1 ≤ n ≤ 4000。ここで、n は next と values の長さです。
  • -1000 ≤ values[i] ≤ 1000
  • 各next[i]は-1、または0からn-1までのノードインデックスです。
  • ノード 0 から開始すると、同じノードを2回訪れることなく、リストは -1 に到達します。
  • ノード 0 からの走査で到達できないノードは、リストの一部ではありません。それらの next エントリはどこを指していてもかまいません。

例

入力
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
出力
[1, 2, 3, 4, 5]
説明
ノード 0 からの探索ではノード 0, 3, 2, 4, 1 を訪れるため、リストは 4, 2, 3, 5, 1 となります。これを並べ替えると、1, 2, 3, 4, 5 です。
challenge icon

発展問題

値をコピーして取り出すことなく、ノードをつなぎ直して O(n log n) 時間でソートできますか?

コードをリセット
def sortList(next, values):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

next = [3, -1, 4, 2, 1]
values = [4, 1, 3, 2, 5]

期待される出力

[1, 2, 3, 4, 5]