👀 문제
https://leetcode.com/problems/remove-nth-node-from-end-of-list/
👊 도전
1. 설계
- list의 size를 구한다.
- 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. 설명
- list의 사이즈를 구한다
- head에 포인터 p를 놓은 후, 끝까지 이동하며 size를 체크한다.
- n-1번째 노드로 이동한다
- for문을 이용해 n-1번째까지 이동한다.
- for문을 나오면 p는 n-1번째에 있다. p.next는 n+1을 가리키도록, p.next.next를 연결한다.
- dummy는 head의 시작 앞에 있으므로 dummy.next를 리턴한다.