一、题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
二、示例
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]
示例2、
输入:l1 = [], l2 = []
输出:[]
示例3
输入:l1 = [], l2 = [0]
输出:[0]
三、思路
本题可以分为以下几种情况。1、当l1存在,l2不存在时,直接返回l1
2、当l1不存在,l2存在时,直接返回l2
3、当l1和l2都不存在时,直接返回l1
4、当两者都存在时,此时进行while遍历。
四、代码展示
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} list1
* @param {ListNode} list2
* @return {ListNode}
*/
var mergeTwoLists = function(list1, list2) {
if(list1 && !list2) return list1
else if(!list1) return list2
else {
let p1 = list1
let p2 = list2
let head1 = new ListNode(0)
let head2 = head1
while(p1 && p2) {
if(p1.val < p2.val) {
head1.next = p1
head1 = head1.next
p1 = p1.next
}else {
head1.next = p2
head1 = head1.next
p2 = p2.next
}
}
if(p1) head1.next = p1
if(p2) head1.next = p2
return head2.next
}
};
五、总结
时间复杂度为O(n),空间复杂度为O(1)。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_47450807/article/details/123149649
内容来源于网络,如有侵权,请联系作者删除!