合并有序链表

21. 合并两个有序链表

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例 1:

img

1
2
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

1
2
输入:l1 = [], l2 = []
输出:[]

示例 3:

1
2
输入:l1 = [], l2 = [0]
输出:[0]

提示:

  • 两个链表的节点数目范围是 [0, 50]
  • -100 <= Node.val <= 100
  • l1l2 均按 非递减顺序 排列

类似于归并排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
class Solution {
public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
ListNode p1 = list1;
ListNode p2 = list2;
ListNode head = new ListNode();
ListNode pre = head;
while(p1 != null && p2 != null){
if(p1.val <= p2.val){ //小的加入到新链
pre.next = p1;
p1 = p1.next;
}else{
pre.next = p2;
p2 = p2.next;
}
pre = pre.next; //pre指向链尾
}
if(p1 != null){
pre.next = p1;
}
if(p2 != null){
pre.next = p2;
}
return head.next;
}
}

时间复杂度:$O(m+n)$

空间复杂度:$O(m+n)$


合并有序链表
http://example.com/2023/06/05/算法/链表/14. 合并有序链表/
作者
PALE13
发布于
2023年6月5日
许可协议