반응형
https://leetcode.com/problems/remove-nth-node-from-end-of-list/
1. 2022/05/01 시도
소요시간: 8분
class Solution {
public ListNode removeNthFromEnd(ListNode head, int n) {
if (head == null) {
return null;
}
// check size
int counter = 0;
ListNode current = head;
while( current != null) {
counter++;
current = current.next;
}
// find and remove
if (counter == n) {
return head.next;
}
current = head;
for (int i=0; i<counter-n-1; i++) {
current = current.next;
}
current.next = current.next == null ? null : current.next.next;
return head;
}
}
풀이 접근 과정
null인 겨우 아무것도 지울 수 없고 결과도 null이기에 바로 리턴한다.
길이를 잰다.
만약에 n이 길이인 경우, 가장 첫번째 노드를 삭제하는 경우이기 때문에 다음 노드로 리턴해주고 끝낸다.
그렇지 않은 경우는 전체 길이counter)에서 n만큼 빼주고 거기다가 1을 빼준다. 1을 더 빼주는 이유는 삭제할 노드의 이전 노드를 찾아야하기때문이다.
그리고 만약에 지워야할 노드의 next가 없을 수 있기에 삼항연상자로 체큰해서 대입해준다.
느낀점
- 링크드 리스트의 edge 케이스를 경험하기에 좋은 문제라고 생각한다.
- 링크드리스트 노드가 2개일 때, 뒤에서 2번째를 삭제하기는 가장 첫번째 노드를 삭제하는 것과 같은 개념을 미리 이해하고 한번에 푼다면 정말 잘 풀었다고 할 수 있겠다.
- 더미를 앞에 하나 더 놓고 풀면 더 깔끔하겠다. 다음에 풀 때 그렇게 풀어볼 수 있겠다.
- 한번에 푸는 방법도 있다. 다음에는 한번에 푸는 방식으로 해보겠다.
알고리즘 정리노트: .leetcode(알고리즘 문제풀이 접근)
반응형
'알고리즘 풀이' 카테고리의 다른 글
.leetcode(328. Odd Even Linked List) (0) | 2022.05.02 |
---|---|
.leetcode(203. Remove Linked List Elements) (0) | 2022.05.02 |
.leetcode(160. Intersection of Two Linked Lists) (0) | 2022.05.01 |
.leetcode(141. Linked List Cycle) (1) | 2022.04.29 |
.leetcode(977. Squares of a Sorted Array) (0) | 2022.04.28 |