-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSolutionTwo.java
More file actions
61 lines (55 loc) · 1.69 KB
/
SolutionTwo.java
File metadata and controls
61 lines (55 loc) · 1.69 KB
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package leetCode_23;
/**
* @author dimdark
* @date 2017-10-08
* @time 8:20 PM
*/
public class SolutionTwo {
class ListNode {
int val;
ListNode next;
ListNode(int x) {
this.val = x;
}
}
private ListNode merge(ListNode list1, ListNode list2) {
ListNode falseHead = new ListNode(-1);
ListNode currNode = falseHead;
while (list1 != null && list2 != null) {
if (list1.val < list2.val) {
currNode.next = list1;
currNode = list1;
list1 = list1.next;
} else {
currNode.next = list2;
currNode = list2;
list2 = list2.next;
}
}
if (list1 != null) {
currNode.next = list1;
} else if (list2 != null) {
currNode.next = list2;
}
return falseHead.next;
}
private ListNode mergeLists(ListNode[] lists, int begin, int end) { // [begin, end]
if (begin < 0 || end < 0 || begin > end) { // bad conditions
throw new IllegalArgumentException("impossible arguments!");
}
if (begin == end) {
return lists[begin];
}
if (begin + 1 == end) {
return merge(lists[begin], lists[end]);
}
int mid = begin + ((end - begin) >> 1);
ListNode leftList = mergeLists(lists, begin, mid);
ListNode rightList = mergeLists(lists, mid + 1, end);
return merge(leftList, rightList);
}
public ListNode mergeKLists(ListNode[] lists) {
if (lists == null || lists.length == 0) return null;
return mergeLists(lists, 0, lists.length - 1);
}
}