题目描述
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
示例 1:
输入:lists = [[1,4,5],[1,3,4],[2,6]] 输出:[1,1,2,3,4,4,5,6] 解释:链表数组如下: [ 1->4->5, 1->3->4, 2->6 ] 将它们合并到一个有序链表中得到。 1->1->2->3->4->4->5->6
示例 2:
输入:lists = [] 输出:[]
示例 3:
输入:lists = [[]] 输出:[]
实现思路
- 将链表两两合并;
- 调用合并两个升序链表的方法。
具体代码
public ListNode mergeKLists(ListNode[] lists) {
int len = lists.length;
if(len == 0){
return null;
}
ListNode newList = null;
for(int i = 0; i <len; i++){
newList = mergeTwoLists(newList, lists[i]);
}
return newList;
}
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
if(list1 == null){
return list2;
}else if(list2 == null){
return list1;
}
ListNode head = new ListNode();
if(list1.val < list2.val){
head.next = list1;
}else{
head.next = list2;
}
ListNode p = head;
while(list1 != null && list2 != null){
if(list1.val > list2.val){
p.next = list2;
list2 = list2.next;
}else{
p.next = list1;
list1 = list1.next;
}
p = p.next;
}
if(list1 == null){
p.next = list2;
}else if(list2 == null){
p.next = list1;
}
return head.next;
}