LeetCode - 19. Remove Nth Node From End of List(Linked List, Two Pointers)*

YAMAMAMO·2022년 4월 8일
0

LeetCode

목록 보기
49/100

문제

연결된 목록의 머리글이 주어지면 목록 끝에서 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]

풀이

자바입니다.

  • 뒤에서 n 번째의 위치는 ListNode의 길이-n 번째 입니다.
/**
 * 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;
    }
}
profile
안드로이드 개발자

0개의 댓글