Given the head
of a linked list, remove the nth
node from the end of the list and return its head.
sz
.1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz
처음엔 멋지구리하게 재귀 함수로 깔끔하게 풀려고 했으나, 굳이 그래야할까라는 생각으로 모든 노드를 컨테이너에 저장하고, 끝에서 n-1
번째 노드의 next
를 끝에서 n
번째 노드의 next
를 초기화하는 방식으로 마무리했습니다.
물론, n
값과 노드의 개수가 같으면 Out of Index
가 발생하기 때문에 이 경우 head
를 head
의 next
로 초기화해서 예외 처리해주었어요.
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;
}
}