[JAVA/LeetCode] Top 100 Liked Question: 19. Remove Nth Node From End of List

👀 문제

https://leetcode.com/problems/remove-nth-node-from-end-of-list/

👊 도전

1. 설계

  1. list의 size를 구한다.
  2. n-1 위치에서 p.next=p.next.next로 설정한다.

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
 *
 * @author HEESOO
 *
 */
/**
 * 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 size=1;
        ListNode dummy=new ListNode(0);
        dummy.next=head;
        ListNode p=head;
        while(p.next!=null){
            p=p.next;
            size++;
        }
        
        p=dummy;
        for(int i=0;i<size-n;i++){
            p=p.next;
        }
        
        p.next=p.next.next;
        return dummy.next;
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. list의 사이즈를 구한다
    • head에 포인터 p를 놓은 후, 끝까지 이동하며 size를 체크한다.
  2. n-1번째 노드로 이동한다
    • for문을 이용해 n-1번째까지 이동한다.
    • for문을 나오면 p는 n-1번째에 있다. p.next는 n+1을 가리키도록, p.next.next를 연결한다.
    • dummy는 head의 시작 앞에 있으므로 dummy.next를 리턴한다.

👏 해결 완료!