A-038● Day 382026.06.13mediumleetcode #19neetcode150
리스트 끝에서 N번째 노드 제거
#linked-list#two-pointers
01
문제
· problem링크드 리스트의 헤드가 주어졌을 때, 끝에서 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
// 지문은 본인 언어 요약 — 원문은 위 링크에서
입출력 예시
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머릿속 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 펼침.