题目
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4
输出:1->1->2->3->4->4
一. 迭代法
我们使用一个指向开头的头指针,当l1
的值小于l2
时,将头指针指向l1
,否则指向l2
,然后使用一个指向较小值的移动的指针,它首先指向头节点,然后依次比较剩下部分的头结点,并指向较小的节点,最后移动节点,依次进行。直到l1
或l2
为空,然后指向不为空的那个。
js实现
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var mergeTwoLists = function(l1, l2) {
if (l1 === null) {
return l2
} else if (l2 === null) {
return l1
}
var head, curl1, curl2, temp
if (l1.val < l2.val) {
head = l1
temp = l1
curl1 = l1.next
curl2 = l2
} else {
head = l2
temp = l2
curl1 = l1
curl2 = l2.next
}
while (curl1 !== null && curl2 !== null) {
if (curl1.val < curl2.val) {
temp.next = curl1
temp = curl1
curl1 = curl1.next
} else {
temp.next = curl2
temp = curl2
curl2 = curl2.next
}
}
if (curl1 === null) {
temp.next = curl2
} else {
temp.next = curl1
}
return head
}
复杂度分析
时间复杂度:O(m+n)
空间复杂度:O(1)
测试结果
✔ Accepted
✔ 208/208 cases passed (68 ms)
✔ Your runtime beats 98.25 % of javascript submissions
✔ Your memory usage beats 48.96 % of javascript submissions (35.4 MB)