Menu
CoddyTech

Sort List

같은 길이의 두 배열에 저장된 단일 연결 리스트가 주어집니다. 노드 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에서 시작해, 목록은 노드를 두 번 방문하지 않고 -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]