코딩테스트

[Hackerrank] Insert a node at a specific position in a linked list

essay0263 2025. 1. 21. 01:56

문제 요약: 단일 연결 리스트에서 특정 위치에 노드 삽입하기

문제 설명:
단일 연결 리스트의 head와 삽입할 데이터(data), 그리고 삽입할 위치(position)가 주어진다. 주어진 위치에 새로운 노드를 삽입한 후, 수정된 연결 리스트를 반환하는 함수를 작성하라.


입력 조건:

  1. 연결 리스트의 길이 n (1 ≤ n ≤ 1000).
  2. 연결 리스트의 각 노드에 저장된 데이터 (정수).
  3. 삽입할 데이터 (data).
  4. 삽입할 위치 (position): 0부터 시작하는 인덱스.

출력 조건:

  • 삽입된 후 수정된 연결 리스트를 반환.

예시:

입력:

 
연결 리스트: 1 → 2 → 3 삽입할 데이터: 4 삽입할 위치: 2

출력:

1 → 2 → 4 → 3

 

지난번 문제들과 이어지는 자료구조 문제이다. 이번 문제에서는 단일 연결 리스트에 특정 위치에 새로운 노드를 삽입하는 코드를 만들어야 한다.

먼저, 현재 위치를 추적하기 위해 변수를 0으로 초기화한 뒤, 삽입 위치 바로 이전 노드까지 반복문을 통해 순회한다. 원하는 위치에 도달하면, 새로운 노드를 생성하고 삽입할 데이터를 저장한다. 그런 다음, 새 노드의 next를 기존 노드의 next로 설정해 기존 연결을 유지하고, 기존 노드의 next를 새로 생성한 노드로 변경하여 리스트에 삽입을 완료한다.

코드는 다음과 같다.

def insertNodeAtPosition(llist, data, position):
    head_node = llist
    current_position = 0

    # 순회하며 삽입 위치를 탐색
    while current_position < position - 1 and llist:
        llist = llist.next
        current_position += 1

    # 새 노드 생성 및 삽입
    new_node = SinglyLinkedListNode(data)
    new_node.next = llist.next
    llist.next = new_node

    return head_node