ListNode 클래스 구조를 이해하고 투 포인터의 개념을 활용하여 풀어야 하는 문제이다.
클래스 구조에 길이를 구하는 메서드가 선언되어 있지 않으므로 첫번째 포인터로 진행하고 두번째 포인터는 n 만큼의 딜레이를 갖고 따라가며 특정 노드를 제거해야한다.
function removeNthFromEnd(head: ListNode | null, n: number): ListNode | null {
const dummy = new ListNode(0);
dummy.next = head;
let first = dummy;
let second = dummy;
for (let i = 0; i <= n; i++) {
first = first.next!;
}
while (first !== null) {
first = first.next;
second = second.next!;
}
// n만큼의 딜레이를 발생시켜 생긴 두번째 포인터의 다음 값이 생략되어야 하는 n번째 값
second.next = second.next!.next;
return dummy.next;
}