본문 바로가기

알고리즘 문제 풀이/LeetCode

82. Remove Duplicates from Sorted List 2

반응형
SMALL

안녕하세요. 꼬동입니다.

 

오랜만에, leetcode에 C를 곁들여 문제를 풀어보았습니다.

 

아직 죽지 않았더군요.

 

하하하하하하하

 

나란 놈하하하하


Sorted Single Linked List가 존재합니다.

 

그 중 중복된 값들을 싸 잡아서, 아예 제거를 하는 것이 목적입니다.

 

 

사실 이해는 쉽게 되지만,

 

어떤 사람이 Single Linked List로 삭제하고 그러겠습니까...

 

Double Linked List를 쓰고 말지..

 

그래서 조금 난감했는데, 뭐 ...

 

펜으로 몇 번 끄적여보니 되더군요.

 

Pointer를 세 개를 두고, 이를 가지고 놀았습니답.

 

제일 앞의 노드 (head)와 현재 노드 (tmp)와 현재의 이전 노드 (before)를 사용하여, 이케 저케 하니까 되네요.

 

그 와중에 좀 조건들이 많았는데,

 

이거 남들한테 보여주려고 깔끔하게 만들기 위해서 푸는데, 시간이 더 오래걸린거 같네요.

 

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */

class Solution {
public:
    ListNode* deleteDuplicates(ListNode* head) {
        int flag = 0;
        ListNode* tmp = head;
        ListNode* before = head;
        
        while (tmp) {
            if (tmp->next && tmp->val == tmp->next->val) {
                flag = 1;
                tmp->next = tmp->next->next;
            } else {
                if (flag) {
                    if (tmp == head) {
                        head = tmp->next;
                        before = tmp->next;
                    } else {                    
                        before->next = tmp->next;
                    }
                } else {
                    before = tmp;                
                }
                
                tmp = tmp->next;           
                
                flag = 0;
            }
        }
        
        return head;
    }
};

 


역시 Python 보다는 C로 문제를 풀어야 그 감칠맛이 살지

 

 


이상 82. Remove Duplicates from Sorted List 2 였습니다. ^_^

반응형
LIST