10
10
*/
11
11
class Solution {
12
12
public:
13
- ListNode* merge_two (ListNode* l1,ListNode* l2){
14
- ListNode* res=NULL ;
15
- if (!l1) return l2;
16
- if (!l2) return l1;
17
- if (l1->val <=l2->val ){
18
- res=l1;
19
- res->next =merge_two (l1->next ,l2);
20
- }else {
21
- res=l2;
22
- res->next =merge_two (l1,l2->next );
13
+ ListNode * mergeTwoLL (ListNode * head1 , ListNode * head2){
14
+ if (head1 == nullptr || head2 == nullptr )
15
+ return head1==nullptr ?head2:head1;
16
+ ListNode* curr1 = head1;
17
+ ListNode* curr2 = head2;
18
+ ListNode* head = new ListNode (-1 );
19
+ ListNode* curr = head;
20
+
21
+ while (curr1!= nullptr && curr2!= nullptr ){
22
+ if (curr1->val <= curr2->val ){
23
+ curr->next = curr1;
24
+ curr1 = curr1->next ;
25
+ curr = curr->next ;
26
+ }
27
+ else {
28
+ curr->next = curr2;
29
+ curr2 = curr2->next ;
30
+ curr = curr->next ;
23
31
}
24
- return res;
25
32
}
33
+ if (curr1==nullptr )
34
+ curr->next = curr2;
35
+ else if (curr2 == nullptr )
36
+ curr->next = curr1;
26
37
38
+ return head->next ;
39
+ }
40
+ ListNode* mergeKLL (vector<ListNode*> lists,int si ,int ei)
41
+ {
42
+ if (si==ei)
43
+ return lists[si];
44
+ if (si+1 ==ei)
45
+ return mergeTwoLL (lists[si],lists[ei]);
46
+
47
+ int mid=(si+ei)/2 ;
48
+ return mergeTwoLL (mergeKLL (lists,si,mid),mergeKLL (lists,mid+1 ,ei));
49
+ }
27
50
ListNode* mergeKLists (vector<ListNode*>& lists) {
28
- if (lists.empty ()) return NULL ;
29
- int last=lists.size ()-1 ,i,j;
30
- while (last!=0 ){
31
- i=0 ;j=last;
32
- while (i<j){
33
- lists[i]=merge_two (lists[i],lists[j]);
34
- i++;
35
- j--;
36
- }
37
- last=j;
38
- }
39
- return lists[0 ];
51
+ if (lists.size ()==0 )
52
+ return NULL ;
53
+ int si=0 ;int ei=lists.size ()-1 ;
54
+
55
+ return mergeKLL (lists,si,ei);
40
56
}
41
- };
57
+ };
0 commit comments