전체 회차
A-038Day 382026.06.13mediumleetcode #19neetcode150

리스트 끝에서 N번째 노드 제거

#linked-list#two-pointers
leetcode #19 · remove-nth-node-from-end-of-list
01

문제

· problem
P.038

리스트 끝에서 N번째 노드 제거

leetcode #19

링크드 리스트의 헤드가 주어졌을 때, 끝에서 n번째 노드를 제거하고 헤드를 반환하세요.

제약
  • · The number of nodes in the list is sz: 1 ≤ sz ≤ 30
  • · Node values: 0 ≤ Node.val ≤ 100
  • · n is always valid: 1 ≤ n ≤ sz
// 지문은 본인 언어 요약 — 원문은 위 링크에서
입출력 예시
example 1input → output
[1,2,3,4,5]
2
[1,2,3,5]
example 2input → output
[1]
1
[]
example 3input → output
[1,2]
1
[1]
02

사전 사고

· pre-solve
● 1리스트 출력● 2선택● 3정답 공개
  • 링크드 리스트의 첫 번째 노드를 제거해야 하는 경우 어떻게 처리해야 하나요?
  • 끝에서 n번째 노드는 1로 시작하나요 아니면 0으로 시작하나요?
  • 두 포인터 사이의 거리는 얼마나 되어야 하나요?
  • 링크된 리스트 구조를 직접 수정할 수 있나요?
  • 입력 리스트가 항상 비어있지 않다고 가정할 수 있나요?
  • n이 리스트의 길이보다 클 수 있나요?
  • 더미 노드가 없으면 문제를 해결할 수 없나요?
던질 질문에 체크하고 확인을 누르세요
// 결과는 세션 메모리만 — 새로고침하면 초기화됩니다 (반복 학습)
03

논리 구조

· logic
● 1슬롯 출력● 2슬롯별 선택● 3정답 공개
// 각 슬롯에 들어갈 코드 한 줄을 골라 알고리즘 흐름을 합성해보세요. 코드는 안 짜지만 논리 뼈대는 직접.
step 1· 더미 노드 생성
dummy = ListNode(0, head)
dummy = ListNode(0)
dummy = head
step 2· 왼쪽 포인터 초기화
left = dummy
left = head
left = None
step 3· 오른쪽 포인터 초기화
right = head
right = dummy
right = head.next
step 4· 오른쪽 포인터를 n칸 전진
right = right.next
right = right.next.next
left = left.next
step 5· 양쪽 포인터 함께 이동
left = left.next
left = left.next.next
right = right.next
step 6· 목표 노드 제거
left.next = left.next.next
left.next = left.next.next.next
left.next.next = None
step 7· 헤드 반환
return dummy.next
return head
return left
각 슬롯에 한 줄씩 골라보세요
// format: slot — 다른 패턴(재귀·DP 등) 은 ordering·state-first 등 별도 format. ADR-08 후속.
04

문제풀이 · 트레이스

· solve
solution.py
1
class Solution:
2
    def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
3
        dummy = ListNode(0, head)
4
        left = dummy
5
        right = head
6
7
        while n > 0:
8
            right = right.next
9
            n -= 1
10
11
        while right:
12
            left = left.next
13
            right = right.next
14
15
        # delete
16
        left.next = left.next.next
17
        return dummy.next
머릿속 dry-run 케이스
// 각 케이스를 머릿속으로 따라가보세요. 막히면 아래 worked example 펼침.
case 1
[1,2,3,4,5]
2
[1,2,3,5]
case 2
[1]
1
[]
case 3
[1,2]
1
[1]
// UI 가 walk-through 안 함 — 학습자가 머릿속으로. 막히면 worked example 펼침.