Menu
CoddyTech

Reorder List

같은 길이의 두 배열에 저장된 단일 연결 리스트가 주어집니다. 노드 i에는 값 values[i]가 있고 노드 next[i]를 가리킵니다. -1은 리스트의 끝을 나타내며, 헤드는 노드 0입니다. 노드가 리스트 순서대로 저장되어 있지 않으므로 링크를 따라가세요.

리스트 순서대로 노드에 L0, L1, ..., Lk라는 이름을 붙입니다. 리스트의 순서를 L0, Lk, L1, Lk-1, L2, Lk-2, ...가 되도록 바꾸세요. 즉, 첫 번째 노드, 마지막 노드, 두 번째 노드, 끝에서 두 번째 노드 순으로 이어집니다. 새 순서대로 값을 반환하세요.

함수

reorderList(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에 도달합니다. 순환은 없습니다.

예제

입력
next = [3, 4, -1, 1, 2]values = [1, 3, 5, 2, 4]
출력
[1, 5, 2, 4, 3]
설명
노드 0에서 링크를 따라가면 목록은 1, 2, 3, 4, 5입니다. 첫 번째, 마지막, 두 번째, 끝에서 두 번째 항목은 1, 5, 2, 4이고, 가운데 값인 3은 마지막에 옵니다.
challenge icon

후속 질문

추가 메모리 O(1)만 사용하여 링크 자체의 순서를 바꿀 수 있나요?

코드 초기화
def reorderList(next, values):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자들

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

예상 출력

[1, 5, 2, 4, 3]