[Algorithm] Remove Duplicates from Sorted List

문제 설명

정렬된 링크드리스트의 head 노드를 받아 중복된 노드를 제거해 반환하는 문제. 문제에 나온 예시를 살펴보면 다음과 같다.

image

코드에 LinkedList의 클래스를 넣어주어서 테스트가 용이했다 👍

푼 방법

   func deleteDuplicates(_ head: ListNode?) -> ListNode? {
        var copyHead = head
        var resultValues: [Int] = []
        
        while copyHead != nil {
            resultValues.append(copyHead?.val ?? 0)
            copyHead = copyHead?.next
        }
        
        let arrayValues = Array(Set<Int>(resultValues)).sorted()
        
        var result: ListNode? = nil
        var resultHead: ListNode? = nil
        
        arrayValues.forEach { value in
            if result == nil {
                result = ListNode(value)
                resultHead = result
            } else {
                result?.next = ListNode(value)
                result = result?.next
            }
        }
        
        return resultHead
    }
  • while문을 통해 head 노드부터 차례로 값을 뽑아서 resultValues에 저장한다.
  • resultValues를 가지고 Set에 저장해 중복을 제거한 뒤 다시 Array로 변환한 값을 arrayValues에 저장한다.
  • arrayValues를 가지고 새롭게 링크드리스트를 만들어 반환한다

그냥 반복문 한번 돌리면 끝날 것 같은 문제였는데… 심지어 다른 코드 보니까 그렇게 되어있던데… LinkedList를 배우고 푸니까 그래도 확실히 이해도가 올라온 게 느껴진다. forEach와 Set을 사용해 볼 좋은 기회였다고 생각한다 😄

결과

image

레포 커밋

Categories:

Updated:

Leave a comment