[LeetCode][Java] Remove Nth Node From End of List

최지수·2021년 11월 16일
0

Algorithm

목록 보기
21/77
post-thumbnail

문제

Given the head of a linked list, remove the nth node from the end of the list and return its head.

제한사항

  • The number of nodes in the list is sz.
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

접근

처음엔 멋지구리하게 재귀 함수로 깔끔하게 풀려고 했으나, 굳이 그래야할까라는 생각으로 모든 노드를 컨테이너에 저장하고, 끝에서 n-1번째 노드의 next를 끝에서 n번째 노드의 next를 초기화하는 방식으로 마무리했습니다.

물론, n 값과 노드의 개수가 같으면 Out of Index가 발생하기 때문에 이 경우 headheadnext로 초기화해서 예외 처리해주었어요.

답안


import java.util.ArrayList;
import java.util.List;

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class RemoveNthNodeFromEndOfList {
    public ListNode removeNthFromEnd(ListNode head, int n) {
        List<ListNode> nodes = new ArrayList<>();

        ListNode node = head;
        while(node != null){
            nodes.add(node);
            node = node.next;
        }

        if(nodes.size() == n){
            head = head.next;
            return head;
        }

        ListNode parentNode = nodes.get(nodes.size() - n - 1);
        ListNode deletNode = nodes.get(nodes.size() - n);
        parentNode.next = deletNode.next;
        return head;
    }
}
profile
#행복 #도전 #지속성

0개의 댓글