题目描述
合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。
示例:
输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6
思路1:两两合并
合并两个有序链表有两种方法:
- (1)迭代
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
//判断链表是否为空
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;
}
ListNode head = new ListNode(0) ;
ListNode p = head;//p始终指向新链表的末端
while(l1 != null && l2 != null){
if(l1.val < l2.val){
p.next = l1;
l1 = l1.next;
}
else{
p.next = l2;
l2 = l2.next;
}
p = p.next;
}
//连接剩余部分
p.next = l1 != null ? l1 : l2;
return head.next;
}
- (2)递归
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null) {
return l2;
}
if (l2 == null) {
return l1;