연결된 목록의 머리글이 주어지면 목록 끝에서 n번째 노드를 제거하고 머리글을 반환합니다.
https://leetcode.com/problems/remove-nth-node-from-end-of-list/
Given the head of a linked list, remove the nth node from the end of the list and return its head.
Example 1:
Input: head = [1,2,3,4,5], n = 2
Output: [1,2,3,5]
Example 2:
Input: head = [1], n = 1
Output: []
Example 3:
Input: head = [1,2], n = 1
Output: [1]
자바입니다.
/**
* 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 Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
int len = countLen(head);
if(head==null) return null;
//head 값을 삭제할 경우 예외처리
if(len-n==0) {
head=head.next;
return head;
}
int pos = 0;
ListNode current = head;//삭제될 놈
ListNode pre = null;
//뒤에서 n 번째의 위치는 len-n; 입니다.
while(pos!=len-n){
pos++;
pre=current;
current=current.next;
}
pre.next=current.next;
return head;
}
//길이 구하기
public int countLen(ListNode head){
int len = 0;
if(head==null) return len;
while(head!=null){
head = head.next;
len++;
}
return len;
}
}