Menu
CoddyTech

Merge Two Sorted Lists

두 개의 단일 연결 리스트가 주어지며, 각 리스트는 길이가 같은 두 배열에 저장되어 있습니다. 첫 번째 리스트에서 노드 i는 값 values1[i]을 가지며 노드 next1[i]를 가리킵니다. 두 번째 리스트도 next2와 values2를 사용해 같은 방식으로 구성됩니다. 두 리스트 모두 -1이 리스트의 끝을 나타내고, 헤드는 노드 0입니다. 노드가 리스트 순서대로 저장되어 있지 않으므로 링크를 따라가세요.

각 리스트는 링크를 따라갈 때 비내림차순으로 정렬되어 있습니다. 두 리스트를 하나의 정렬된 리스트로 병합하고, 그 값을 순서대로 반환하세요.

함수

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
첫 번째 목록의 각 노드가 연결되는 노드의 인덱스 또는 마지막 노드의 경우 -1
values1integer-array
첫 번째 목록의 각 노드가 보유한 값
next2integer-array
두 번째 리스트의 각 노드가 연결되는 노드의 인덱스, 또는 마지막 노드의 경우 -1
values2integer-array
두 번째 리스트의 각 노드가 보유한 값
반환값integer-array
병합된 목록의 값을 순서대로

제약 조건

  • 1 ≤ L1 ≤ 2000이며, 여기서 L1은 next1과 values1의 길이입니다.
  • 1 ≤ L2 ≤ 2000이며, 여기서 L2는 next2와 values2의 길이입니다.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • 각 next1의 항목은 -1이거나 첫 번째 리스트의 노드 인덱스이고, next2의 각 항목은 -1이거나 두 번째 리스트의 노드 인덱스입니다.
  • 노드 0에서 시작하여 각 리스트는 모든 노드를 정확히 한 번씩 방문한 다음 -1에 도달합니다. 순환은 없습니다.
  • 각 리스트는 연결을 따라 비감소 순서로 정렬되어 있습니다.

예제

입력
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
출력
[1, 2, 3, 4, 6, 7, 9]
설명
링크를 따라가면 첫 번째 목록은 노드 0, 2, 1을 방문하고 1, 4, 6을 읽습니다. 두 번째 목록은 2, 3, 7, 9를 읽습니다. 매번 앞에 있는 값 중 더 작은 값을 선택하면 1, 2, 3, 4, 6, 7, 9가 됩니다.
challenge icon

후속 질문

총 노드 수가 N일 때, O(N log k) 시간에 k개의 정렬된 리스트를 병합할 수 있나요?

코드 초기화
def mergeTwoLists(next1, values1, next2, values2):
    # 여기에 코드를 작성하세요

테스트 #1

테스트 #2

테스트 #3

인자들

next1 = [2, -1, 1]
values1 = [1, 6, 4]
next2 = [3, 2, -1, 1]
values2 = [2, 7, 9, 3]

예상 출력

[1, 2, 3, 4, 6, 7, 9]