合并k个排序链表,并且返回合并后的排序链表。
样例 给出3个排序链表[2->4->null,null,-1->null],返回 -1->2->4->null
一.目的:合并k个排序链表,并且返回合并后的排序链表
二.思路:法1:分治的思想,先将 k/2 的搞定,在将2个list merge起来
代码如下:
/**
* Definition for ListNode.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int val) {
* this.val = val;
* this.next = null;
* }
* }
*/
public class Solution {
/**
* @param lists: a list of ListNode
* @return: The head of one sorted list.
*/
public ListNode mergeKLists(List<ListNode> lists) {
if(lists.size() == 0){
return null;
}
return mergeHelper(lists,0,lists.size() – 1);
}
private ListNode mergeHelper(List<ListNode> lists, int start, int end){
if(start == end){
//return Lists.get(start); 大小写错误
return lists.get(start);
}
int mid = start + (end – start) / 2;
ListNode left = mergeHelper(lists, start, mid);
ListNode right = mergeHelper(lists, mid + 1, end);
return mergeTwoList(left,right);
}
private ListNode mergeTwoList(ListNode head1,ListNode head2){
ListNode dummy = new ListNode(0);
ListNode tail = dummy;
while(head1 != null && head2 != null){
if(head1.val < head2.val){
tail.next = head1;
tail = tail.next; // 不该忘记
head1 = head1.next;
}else{
tail.next = head2;
tail = tail.next; //不该忘记
head2 = head2.next;
}
}
if(head1 == null){
tail.next = head2;
}else{
tail.next = head1;
}
return dummy.next;
}
}