https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/description
Q. 정렬된 리스트에서 중복된 값을 가진 노드를 제거하고 결과 노드를 출력하라.
Solution.
중복된 노드를 검색하고, 해당 노드 전후 처리 link 를 잘 해 주는 것이 핵심이라 하겠다.
다만, 중복노드 이전 노드를 알아야 중복이 끝난 지점 노드에 연결을 해 주므로, 이를 어떻게 처리하느냐
등이 조금 신경 쓸 여지가 있는 부분이 될 터이다.
최대한 현재 노드 기준으로 문제를 국한시키며, 단순화하는데 노력을 써 본다.
더보기
public ListNode DeleteDuplicates(ListNode head)
{
const int INIT = int.MinValue;
ListNode node = head;
ListNode prev = null;
int dup = INIT;
ListNode newHead = null;
while(node != null)
{
if(dup != INIT)
{
// 이미 삭제 중인 노드가 있으면, 현재 노드가 이 대상인지 확인 후 제거.
if(node.val == dup)
{
if(prev != null)
prev.next = node.next;
node = node.next;
dup = node!=null && node.val==dup ? dup : INIT;
}
else
dup = INIT;
continue;
}
// 현재 노드 기준, 노드가 다음 노드와 같으면 현재 노드 삭제.
if(node.next!=null && node.val==node.next.val)
{
// remove cur 'node'.
dup = node.val;
if(prev != null)
prev.next = node.next;
node = node.next;
}
else
{
// 삭제 대상이 아닌 노드 중 첫 노드가 새로운 head.
if(newHead == null)
newHead = node;
dup = INIT;
prev = node;
node = node.next;
}
}
return newHead;
}
요샌 그냥 이 정도면 만족스럽다... 으으..
'Leetcode > Top Interview 150' 카테고리의 다른 글
[BinaryTreeGeneral][Easy] 100. Same Tree (0) | 2024.05.29 |
---|---|
[LinkedList][Medium] 61. Rotate List (0) | 2024.05.27 |
[LinkedList][Medium] 92. Reverse Linked List II (0) | 2024.05.26 |
[LinkedList][Medium] 138. Copy List With Random Pointer (0) | 2024.05.26 |
[Stack][Medium] 150. Evaluate Reverse Polish Notation (0) | 2024.05.11 |