[JAVA/LeetCode] Top 100 Liked Question: 23. Merge k Sorted Lists

👀 문제

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

👊 도전

1. 설계

  1. lists의 각 리스트 원소들을 ArrayList에 저장한다.
  2. Collections.sort()로 오름차순 정렬한다.
  3. ListNode 형태로 연결한 후 리턴한다.

2. 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
 *
 * @author HEESOO
 *
 */
/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
class Solution {
    public ListNode mergeKLists(ListNode[] lists) {
        int size=lists.length;
        ArrayList<Integer> list=new ArrayList<>(); // 모든 원소들을 정렬
        for(int i=0;i<size;i++){
            ListNode temp=lists[i]; // 리스트 하나 선택
            while(temp!=null){ // 모든 원소를 list에 삽입
                list.add(temp.val);
                temp=temp.next;
            }
        }
        
        Collections.sort(list); // 오름차순 정렬
        
        ListNode result=new ListNode(0);
        ListNode p=result;
        for(int i=0;i<list.size();i++){ //ListNode 형으로 연결
            p.next=new ListNode(list.get(i));
            p=p.next;
        }
        
        return result.next;
    }
}

3. 결과

실행결과 🤟 성공 🤟

4. 설명

  1. lists의 모든 원소를 ArrayList에 저장하고 오름차순 정렬한다
    • lists의 i번째 리스트의 시작 노드를 temp가 가리킨다.
    • temp를 이동하며 ArrayList에 저장한다.
    • 모든 원소가 list에 들어가면 Collections.sort()로 오름차순 정렬한다.
  2. ListNode 형으로 변환 후 리턴한다
    • 정렬된 list를 순서대로 ListNode에 연결한다.
    • 정렬된 result.next를 리턴한다.

👏 해결 완료!