Skip to content

Commit b02a3cf

Browse files
committed
feat : merge-k-sorted-list
1 parent 9150f5e commit b02a3cf

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

merge-k-sorted-lists/ekgns33.java

+86
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
/**
2+
* Definition for singly-linked list.
3+
* public class ListNode {
4+
* int val;
5+
* ListNode next;
6+
* ListNode() {}
7+
* ListNode(int val) { this.val = val; }
8+
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
9+
* }
10+
*/
11+
class Solution {
12+
public ListNode mergeKLists(ListNode[] lists) {
13+
List<ListNode> list = new LinkedList<>();
14+
for(ListNode l : lists) {
15+
list.add(l);
16+
}
17+
return divide(list);
18+
19+
}
20+
public ListNode divide(List<ListNode> list) {
21+
//두개씩 나누기. 두개 안되면 그냥 리스트에 넣고 리턴
22+
int n = list.size();
23+
ListNode sum1;
24+
ListNode sum2;
25+
if(list.size() <= 2) {
26+
return merge(list);
27+
}
28+
29+
int mid = n / 2;
30+
List<ListNode> upper = new LinkedList<>();
31+
List<ListNode> last = new LinkedList<>();
32+
33+
34+
for(int i = 0; i < mid; i ++) {
35+
upper.add(list.get(i));
36+
37+
}
38+
sum1 = divide(upper);
39+
40+
41+
for(int i = mid; i < n; i++) {
42+
last.add(list.get(i));
43+
}
44+
sum2 = divide(last);
45+
46+
List<ListNode> m = new LinkedList<>();
47+
m.add(sum1);
48+
m.add(sum2);
49+
50+
51+
return merge(m);
52+
53+
54+
}
55+
public ListNode merge(List<ListNode> list) {
56+
//edge
57+
if(list.size()==0) return null;
58+
if(list.size() == 1) return list.get(0);
59+
60+
ListNode n1 = list.get(0);
61+
ListNode n2 = list.get(1);
62+
// System.out.println(n1.val + " : " + n2.val);
63+
64+
ListNode res = new ListNode(0);
65+
ListNode head = res;
66+
67+
while(n1 != null && n2 != null) {
68+
if(n1.val < n2.val){
69+
res.next = n1;
70+
res = res.next;
71+
n1 = n1.next;
72+
} else {
73+
res.next = n2;
74+
res = res.next;
75+
n2 = n2.next;
76+
}
77+
78+
}
79+
if(n1 == null) res.next = n2;
80+
if(n2 == null) res.next = n1;
81+
return head.next;
82+
83+
84+
85+
}
86+
}

0 commit comments

Comments
 (0)