오늘 배웠습니다 : 단일 연결 목록의 끝에서 K 번째 노드 제거

문제 설명



단일 연결 리스트의 헤드와 연결 리스트의 끝에서 제거할 k번째 노드를 나타내는 정수 k를 취하는 함수를 작성하십시오.

샘플 입력



head = 0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8 -> 9
k = 4

샘플 결과



# node 6 is removed
0 -> 1 -> 2 -> 3 -> 4 -> 5 -> 7 -> 8 -> 9

코드 #1



class LinkedList:
    def __init__(self, value):
        self.value = value
        self.next = None


def remove_kth_node_from_end(head, k):
    ptr_1 = head
    ptr_2 = head
    ctr = 0

    # Move ptr_2
    while ctr < k:
        # Return early if k is longer than list's length
        if ctr < k and ptr_2 is None:
            return
        ptr_2 = ptr_2.next
        ctr += 1

    # Check if removing the first element on the list
    if ptr_2 is None:
        head.value = head.next.value
        head.next = head.next.next
        return head

    while ptr_2.next is not None:
        ptr_1 = ptr_1.next
        ptr_2 = ptr_2.next

    # Remove kth node from end
    ptr_1.next = ptr_1.next.next
    return head

메모


  • 이것은 단일 연결 목록이기 때문에 목록의 끝까지 탐색한 다음 k번째 노드를 역추적할 수 없습니다.
  • 두 개의 포인터를 사용하여 연결 목록의 시작 노드와 끝 노드를 추적합니다.

  • 크레딧


  • 문제 설명에 대한 Algoexpert

  • Chris Leipelt .
  • 좋은 웹페이지 즐겨찾기