[Algorithm] Remove Duplicates from Sorted List
문제 설명
정렬된 링크드리스트의 head 노드를 받아 중복된 노드를 제거해 반환하는 문제. 문제에 나온 예시를 살펴보면 다음과 같다.
코드에 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을 사용해 볼 좋은 기회였다고 생각한다 😄
Leave a comment