输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。
示例1:
输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4 限制:
0 <= 链表长度 <= 1000
解题思路:
算法流程:
复杂度分析:
时间复杂度 O(M+N) : M,N 分别为链表 l1, l2 的长度,合并操作需遍历两链表。
空间复杂度 O(1) : 节点引用 dum , cur 使用常数大小的额外空间。
代码:
class Solution {
public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
if (l1 == null && l2 == null) {
return null;
} else if (l1 == null) {
return l2;
} else if (l2 == null) {
return l1;
}
ListNode dum = new ListNode(0);
ListNode cur = dum;
ListNode temp1 = l1, temp2 = l2;
while (temp1 != null && temp2 != null) {
if (temp1.val > temp2.val) {
cur.next = temp2;
temp2 = temp2.next;
} else {
cur.next = temp1;
temp1 = temp1.next;
}
cur = cur.next;
}
if (temp1 != null) {
cur.next = temp1;
} else {
cur.next = temp2;
}
return dum.next;
}
}