Menu
CoddyTech

Middle of the Linked List

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

중간 노드의 값을 반환하세요. 리스트의 노드 수가 짝수이면 중간 노드가 두 개입니다. 이때 두 번째 노드의 값을 반환하세요.

함수

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
각 노드가 보유한 값
nextinteger-array
각 노드가 연결되는 노드의 인덱스, 또는 마지막 노드인 경우 -1
반환값integer
중간 노드의 값, 길이가 짝수일 때 두 번째 중간 노드

제약 조건

  • 1 ≤ n ≤ 5000이며, 여기서 n은 values와 next의 길이입니다.
  • -104 ≤ values[i] ≤ 104
  • next[i]는 -1이거나 0부터 n-1까지의 노드 인덱스입니다.
  • 노드 0에서 시작하여 목록은 모든 노드를 정확히 한 번씩 방문한 다음 -1에 도달합니다. 사이클은 없습니다.

예제

입력
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
출력
5
설명
노드 0에서 링크를 따라가면 노드 0, 3, 4, 2, 1을 지나므로, 목록은 4, 7, 5, 2, 9입니다. 다섯 개 중 세 번째는 노드 4이며, 그 값은 5입니다. 배열 자체의 가운데 항목인 values[2] = 2는 다른 노드입니다.

lock icon제출 시 숨은 테스트 +13개

challenge icon

후속 질문

한 번의 순회로 목록의 3분의 1 지점에 있는 노드를 반환할 수 있나요? 각 포인터는 얼마나 빠르게 움직여야 하며, 어디에서 멈추면 될까요?

코드 초기화
def middleNode(values, next):
    # 여기에 코드를 작성하세요
테스트 케이스

케이스 1

케이스 2

케이스 3

입력

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

기대값

5