[LeetCode 19] Remove Nth Node From End of List

Mar 4, 2020


[LeetCode 19] Remove Nth Node From End of List

문제 요약

단방향 연결리스트와 자연수 n이 주어졌을 때, 뒤에서 n번째 노드를 삭제한 연결리스트를 반환하는 문제

풀이

재귀 함수를 이용하여 연결리스트의 맨 끝에 도달한 뒤, 반환을 통해 다시 되돌아 오면서 개수를 세어준다.
노드의 개수와 n이 동일해지는 순간 다음 노드를 반환하고 그 다음 단계에서 다음 노드로의 연결을 반환된 노드로 이어준다.

코드

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    private int target;
    private int cnt = 0;
    
    private ListNode go(ListNode n) {
        if (n == null) {
            cnt++;
            return n;
        }
        ListNode tmp = go(n.next);
        if (cnt == target) {
            cnt++;
            return n.next;
        }
        if (cnt == target + 1) n.next = tmp;
        cnt++;
        return n;
    }
    
    public ListNode removeNthFromEnd(ListNode head, int n) {
        target = n;
        return go(head);
    }
}