👀 문제
https://leetcode.com/problems/merge-k-sorted-lists/
👊 도전
1. 설계
- lists의 각 리스트 원소들을 ArrayList에 저장한다.
- Collections.sort()로 오름차순 정렬한다.
- 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. 설명
- lists의 모든 원소를 ArrayList에 저장하고 오름차순 정렬한다
- lists의 i번째 리스트의 시작 노드를 temp가 가리킨다.
- temp를 이동하며 ArrayList에 저장한다.
- 모든 원소가 list에 들어가면 Collections.sort()로 오름차순 정렬한다.
- ListNode 형으로 변환 후 리턴한다
- 정렬된 list를 순서대로 ListNode에 연결한다.
- 정렬된 result.next를 리턴한다.