Remove n-th from end

Pioneer가 n 만큼 먼저 땅을 밝히고, 이후에 Follower와 Pioneer가 발맞추어 리스트의 끝까지 도달하면 된다. 이때 Pioneer를 한 칸 덜 보내야 Follower가 삭제할 노드 바로 직전에 위치하도록 만들 수 있다.

def remove_nth_from_end(head, n):
    pioneer = head
    follower = head

    while n > 0:
        n -= 1
        pioneer = pioneer.next

    if pioneer is None:
        # remove head
        return head.next

    while pioneer.next:
        pioneer = pioneer.next
        follower = follower.next

    # now, follower is right before the node that needs be deleted
    follower.next = follower.next.next

    return head
Last Update: 2023-01-25 11:50:16 PM