23. Merge k Sorted Lists

Min Young Kim·2023년 3월 12일
0

algorithm

목록 보기
91/198

Problem From.

https://leetcode.com/problems/merge-k-sorted-lists/

오늘 문제는 linked list 를 원소로 가지는 list 가 주어졌을때, 그 안의 원소를 오름차순으로 나열하여 반환하는 문제였다.

이 문제는 priority queue 를 쓰면 쉽게 풀 수 있는데, priority queue 는 queue 안에 원소를 넣으면 오름차순 또는 내림차순으로 자동으로 정렬되게 할 수 있는 자료구조이다.

list 안에 주어진 linked list 를 priority queue 안에 넣은뒤 다시 빼내는 방식으로 문제를 풀었다.

/**
 * Example:
 * var li = ListNode(5)
 * var v = li.`val`
 * Definition for singly-linked list.
 * class ListNode(var `val`: Int) {
 *     var next: ListNode? = null
 * }
 */
class Solution {
    fun mergeKLists(lists: Array<ListNode?>): ListNode? {
        val pq = PriorityQueue<ListNode>{ a,b -> Integer.compare(a.`val`, b.`val`) }
        for (n in lists) {
            n?.let { pq.offer(it) }
        }
        val head = ListNode()
        var curr = head
        while (!pq.isEmpty()) {
            val min = pq.poll()
            curr.next = min
            min?.next?.let {
                pq.offer(it)
            }
            curr = curr.next
        }
        return head.next
    }
}
profile
길을 찾는 개발자

0개의 댓글