Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 순회
- list
- Linked List
- 리스트
- 스택
- 정렬
- traversal
- 오픈 채팅방
- sorting
- kakao
- leetcode
- 배열
- 공채
- tree
- LinkedList
- 트리
- Math
- stack
- Bubble Sort
- Bit
- 카카오
- 완전검색
- Subset
- bst
- binary search tree
- Easy
- Medium
- 2019 카카오
Archives
- Today
- Total
미리수얌 블로그
LeetCode: Remove Nth Node From End of List 본문
Remove Nth Node From End of List
Singly 링크드 리스트가 주어졌을때 뒤에서 부터 N 번째 (N 은 언제나 valid 일때) 를 remove 합니다.
예1) 1->2->3->4->5, N = 4
1->3->4->5 를 리턴하면 됩니다.
예2) 1->2->3->4->5, N = 1
1->2->3->4 를 리턴하면 됩니다.
이 문제는 한번 생각해 보시고 코드를 보시길 바랍니다.
되게 재밌있는 문제죠.
가장 쉬운 방법은 길이를 구하는거겠죠. 하지만 그렇게 되면 O(2N) 으로 문제를 풀어야합니다. O(N) 으로도 풀 수 있죠. 힌트를 보시면 아시겠지만 일단 N 떨어진 노드를 만듭니다. 그리고 그 노드가 NULL 이 될 때 그 전에 노드는 끝에서 N 번째 떨어져 있음을 알게됩니다.
예) 1->2->3->4->5, N = 3
뒷 노드: 1 에 있음
앞 노드: 5 에 있음 (3 만큼 떨어져있음)
앞 노드가 NULL 이 된 만큼 움직이면
뒷 노드: 2에 있음. 그리고 3을 remove 하면 됨.
public ListNode removeNthFromEnd(ListNode head, int n) {
// this takes care of edge case like n = length of list
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode prev = newHead;
ListNode next = newHead;
// n is always valid
for (int i = 0; i <= n; ++i) {
next = next.next;
}
while (next != null) {
prev = prev.next;
next = next.next;
}
// remove node
prev.next = prev.next.next;
// java takes care of front node
return newHead.next;
}
'코딩문제풀이 > Leetcode' 카테고리의 다른 글
LeetCode: Count Numbers with Unique Digits (0) | 2018.09.29 |
---|---|
Leetcode: Subsets (0) | 2018.09.25 |
LeetCode: Letter Combinations of a Phone Number (0) | 2018.09.25 |
LeetCode: Remove Duplicates from Sorted Array (0) | 2018.09.25 |
Valid Parentheses (0) | 2018.09.25 |
Comments