题解 | #合并k个已排序的链表#
合并k个已排序的链表
http://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
见代码
import java.util.*;
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode mergeKLists(ArrayList<ListNode> lists) {
if(lists == null || lists.size() == 0) return null;
int len = lists.size();
if(len == 1) return lists.get(0);
ArrayList<ListNode> ans = new ArrayList();
for(int i = 0;i < len;i += 2){
if(i == len - 1){
ans.add(lists.get(i));
break;
}
ans.add(merge2(lists.get(i),lists.get(i + 1)));
}
return mergeKLists(ans);
}
ListNode merge2(ListNode list1, ListNode list2){
ListNode ans = new ListNode(0);
ListNode ptr = ans;
while(list1 != null || list2 != null){
if(list1 == null){
ptr.next = list2;
return ans.next;
}
if(list2 == null){
ptr.next = list1;
return ans.next;
}
if(list1.val < list2.val){
ptr.next = list1;
list1 = list1.next;
}else{
ptr.next = list2;
list2 = list2.next;
}
ptr = ptr.next;
}
return ans.next;
}
}