【leetcode hot 100 23】合并K个有序链表
解法一:按顺序两两合并升序列表。先排序lists[0]
和lists[0]
得到结果result
,再将结果result
与list[3]
排序,以此类推。
/**
* 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) {
if(lists.length==0){
return null;
}
// 按顺序两两合并升序列表
ListNode result = lists[0];
for(int i=1;i<lists.length;i++){
result = mergeTwoLists(result, lists[i]);
}
return result;
}
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode new_list=null;
if(list1 != null && list2 != null){
if(list1.val<=list2.val){
new_list=list1;
list1=list1.next;
new_list.next=null;
}
else{
new_list=list2;
list2=list2.next;
new_list.next=null;
}
}
else{
return list1!=null?list1:list2;
}
ListNode curr=new_list;
while(list1 != null && list2 != null){
if(list1.val<=list2.val){
ListNode temp = list1.next;
curr.next=list1;
list1.next=null;
list1=temp;
}
else{
ListNode temp = list2.next;
curr.next=list2;
list2.next=null;
list2=temp;
}
curr=curr.next;
}
if(list1!=null){
curr.next=list1;
}
if(list2!=null){
curr.next=list2;
}
return new_list;
}
}
注意:
- 要先判断
lists.length==0