-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMergekSortedLists.java
More file actions
128 lines (128 loc) · 3.79 KB
/
MergekSortedLists.java
File metadata and controls
128 lines (128 loc) · 3.79 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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
/**
* 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; }
* }
*/
// k way merging brute force
/*
ListNode sorted_list = null;
ListNode trv = null;
int null_lists = 0;
int non_empty_list_index = -1;
int index;
int min;
while(null_lists != lists.length-1){
min = Integer.MAX_VALUE;
index = -1;
null_lists = 0;
for(int i = 0;i<lists.length;i++){
if(lists[i] == null){
null_lists++;
continue;
}
else
non_empty_list_index = i;
if(lists[i].val < min){
min = lists[i].val;
index = i;
}
}
if(sorted_list == null){
sorted_list = lists[index];
trv = sorted_list;
}
else{
trv.next = lists[index];
}
trv = trv.next;
lists[index] = lists[index].next;
}
while(lists[non_empty_list_index] != null){
if(sorted_list == null){
sorted_list = lists[non_empty_list_index];
trv = sorted_list;
}
else
trv.next = lists[non_empty_list_index];
trv = trv.next;
lists[non_empty_list_index] = lists[non_empty_list_index].next;
}
return sorted_list;
*/
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
if(lists.length == 0) return null;
if(lists.length == 1) return lists[0];
DAC(lists,0,lists.length-1);
return lists[0];
}
public void DAC(ListNode lists[],int low,int high){
if(low<high){
int mid = low + (high - low)/2;
DAC(lists,low,mid);
DAC(lists,mid+1,high);
merge(lists,low,mid);
}
}
public void merge(ListNode lists[],int low,int mid){
ListNode merge_list = null;
ListNode trv = null;
int i = low,j = mid+1;
while(lists[i] != null && lists[j] != null){
if(lists[i].val < lists[j].val){
if(merge_list == null){
merge_list = lists[i];
trv = merge_list;
}
else{
trv.next = lists[i];
trv = trv.next;
}
lists[i] = lists[i].next;
}
else{
if(merge_list == null){
merge_list = lists[j];
trv = merge_list;
}
else{
trv.next = lists[j];
trv = trv.next;
}
lists[j] = lists[j].next;
}
}
if(lists[i] == null){
while(lists[j] != null){
if(merge_list == null){
merge_list = lists[j];
trv = merge_list;
}
else{
trv.next = lists[j];
trv = trv.next;
}
lists[j] = lists[j].next;
}
}
if(lists[j] == null){
while(lists[i] != null){
if(merge_list == null){
merge_list = lists[i];
trv = merge_list;
}
else{
trv.next = lists[i];
trv = trv.next;
}
lists[i] = lists[i].next;
}
}
lists[i] = merge_list;
}
}