Menu
CoddyTech

Intersection of Two Linked Lists

두 개의 단일 연결 리스트가 하나의 노드 풀에 있습니다. 노드 i는 노드 next[i]를 가리키며, -1은 리스트의 끝을 나타냅니다. 리스트 A는 노드 headA에서 시작하고 리스트 B는 노드 headB에서 시작합니다. 노드는 특별한 순서 없이 저장되어 있으므로 링크를 따라가세요.

두 리스트는 중간에 합쳐질 수 있습니다. 즉, 어떤 노드부터 끝까지 같은 노드들을 계속 거칠 수 있습니다. 두 리스트에 모두 포함된 첫 번째 노드의 인덱스를 반환하세요. 공통 노드가 없으면 -1을 반환하세요.

함수

getIntersectionNode(next: integer-array, headA: integer, headB: integer) → integer
nextinteger-array
각 노드가 연결하는 노드의 인덱스 또는 목록의 마지막 노드인 경우 -1
headAinteger
리스트 A의 첫 번째 노드
headBinteger
리스트 B의 첫 번째 노드
반환값integer
두 목록이 공유하는 첫 번째 노드 또는 -1

제약 조건

  • 2 ≤ n ≤ 104이며, 여기서 n은 next의 길이입니다.
  • 각 next[i]는 -1이거나 0부터 n-1까지의 노드 인덱스입니다.
  • 0 ≤ headA, headB ≤ n-1이고 headA ≠ headB입니다.
  • 두 목록 모두 노드를 두 번 방문하지 않고 -1에서 끝납니다. 순환은 없습니다.
  • 모든 노드는 목록 A에 있거나, 목록 B에 있거나, 두 목록 모두에 있습니다.

예제

입력
next = [-1, 4, 1, 5, 0, 1]headA = 3headB = 2
출력
1
설명
A는 3, 5, 1, 4, 0을 방문하고 B는 2, 1, 4, 0을 방문합니다. 노드 1부터 두 경로는 모든 노드를 공유하며, A의 그 이전 노드 중 B에 있는 노드는 없으므로 답은 1입니다.
challenge icon

후속 질문

추가 메모리 O(1)을 사용하여 O(m + k) 시간 안에 노드를 찾을 수 있나요?

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

테스트 #1

테스트 #2

테스트 #3

인자들

next = [-1, 4, 1, 5, 0, 1]
headA = 3
headB = 2

예상 출력

1