-
LeetCode - 19. Remove Nth Node From End of List알고리즘/알고리즘 문제 복기 2021. 3. 17. 21:08
leetcode.com/problems/remove-nth-node-from-end-of-list/
Q.
Answer.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475/*** 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) {ListNode dummy = head;ListNode prev = null;int length = 0;// get length;while(dummy != null) {++length;dummy = dummy.next;}dummy = head;int count = 0;int target_node_prev_no = length - n;ListNode target_node_prev = head;if(length == 1) {head = null;return head;}if(length == 2) {if(n == 1) {head.next = null;}if(n == 2) {head = head.next;}return head;}while(dummy != null) {++count;if(target_node_prev_no == 0 && count == 1) {return head.next;}if(dummy.next == null && n == 1) {target_node_prev.next = null;break;}else {if(count == target_node_prev_no)target_node_prev = dummy;if(count == target_node_prev_no + 2)target_node_prev.next = dummy;}dummy = dummy.next;}return head;}}cs if구문을 참 많이 쓴 것 같다.
풀면서 생각한건 다음과 같이
prev를 체크하는 포인터를 이용해 다다음 노드로 연결하면 간단하게 풀 수 있을 것 같았다.
그런데 n이 노드의 길이와 같을 때와(노드의 맨 처음을 지워야 할 때), 노드의 맨 마지막을 지워야 할 때 에러가 각각 발생해서 if문을 통해 처리해주었는데 코드가 지저분해졌다.
다음과 같이 풀 수도 있다.
'알고리즘 > 알고리즘 문제 복기' 카테고리의 다른 글
LeetCode 39. - Combination Sum (0) 2021.03.24 Leet Code - 34. Find First and Last Position of Element in Sorted Array (0) 2021.03.24 Leet Code - 11. Container With Most Water (0) 2021.03.14 Leet code - 5. Longest Palindromic Substring(Java) (0) 2021.03.14 Leetcode - 3. Longest SubString Without Repeating Characters (0) 2021.03.08