题目解析:(题目来源:23. 合并K个升序链表)
给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
输入: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
用的方法比较好想,也符合我现在的能力。for循环,每次合并两个有序链表,合并lists.length次。
时间复杂度:O(k^2 n) k为合并的次数
空间复杂度:没有用到与 k 和 n 规模相关的辅助空间,故渐进空间复杂度为 O(1)
class Solution {
public ListNode mergeKLists(ListNode[] lists) {
ListNode ans = null;
if(lists.length == 0){
return null;
}
for(int i = 0 ; i < lists.length ; ++i){
ans = merge(ans , lists[i]);
}
return ans;
}
public ListNode merge(ListNode aPtr , ListNode bPtr){
if(aPtr == null || bPtr == null){
return aPtr == null ? bPtr : aPtr;
}
ListNode res = new ListNode(0);
ListNode cur = res;
while(aPtr != null && bPtr != null){
if(aPtr.val < bPtr.val){
cur.next = aPtr;
aPtr = aPtr.next;
}else{
cur.next = bPtr;
bPtr = bPtr.next;
}
cur = cur.next;
}
cur.next = aPtr == null ? bPtr : aPtr;
return res.next;
}
}