题目:
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例 1:
示例 2:
输入:l1 = [], l2 = [] 输出:[]
示例 3:
输入:l1 = [], l2 = [0] 输出:[0]
思路:
这道题的思路很简单,就和合并数组很像,但是这里是链表,而单向链表只认next操作这个规则想必也不用多说,这里我们先创建一个空链表用来保存新产生的链表,随后创建一个dummy指向这个新链表,当 l1 以及 l2 都不为空时循环开始,比较两个值的大小,把较小的那个节点 赋给 dummy.next ,直到某一个链表为空时退出循环,这里很明显会产生一个问题,那就是当两个链表长度不一致的时候就会有其中一个链表会有剩余节点,这里其实处理方式很简单,因为给我们的链表都是有序的升序链表,所以剩下的链表节点一定是升序的并且一定大于现在产生的链表的最后一个节点(也就是现在哨兵(dummy)的指向的节点) ,我们只要判断到哪一个链表不为空时,直接将该节点的后续节点赋给 dummy.next 即可
代码:
var mergeTwoLists = function(l1, l2) {
let curr = new ListNode()
let dummy = curr
while(l1 !== null && l2 !== null) {
if(l1.val < l2.val) {
dummy.next = l1
l1 = l1.next
} else {
dummy.next = l2
l2 = l2.next
}
dummy = dummy.next
}
if(l1 !== null) {
dummy.next = l1
}
if(l2 !== null) {
dummy.next = l2
}
return curr.next
};