21. Merge Two Sorted Lists
Leetcode
https://leetcode.com/problems/merge-two-sorted-lists/
題目
You are given the heads of two sorted linked lists list1 and list2.
Merge the two lists in a one sorted list. The list should be made by splicing together the nodes of the first two lists.
Return the head of the merged linked list.
Example 1:

Input: list1 = [1,2,4], list2 = [1,3,4]
Output: [1,1,2,3,4,4]Example 2:
Input: list1 = [], list2 = []
Output: []Example 3:
Input: list1 = [], list2 = [0]
Output: [0]解答
方法一
var mergeTwoLists = function(list1, list2) {
if(!list1) return list2;
if(!list2) return list1;
let head = list1.val <= list2.val ? list1 : list2;
let p1 = head.next;
let p2 = head === list1 ? list2 : list1;
const result = head;
while(p1 && p2) {
if(p1.val<=p2.val) {
head.next = p1;
head = p1;
p1 = p1.next;
} else {
head.next = p2;
head = p2;
p2 = p2.next;
}
}
// 其中一個 pointer 為 null 的話,剩下的要指向另一個 linked list
if(!p1) head.next = p2;
if(!p2) head.next = p1;
return result;
};Runtime: 113 ms, faster than 39.65% of JavaScript online submissions for Merge Two Sorted Lists.
Memory Usage: 44.3 MB, less than 5.02% of JavaScript online submissions for Merge Two Sorted Lists.
方法二
Recursion
var mergeTwoLists = function(list1, list2) {
if(!list1) return list2;
if(!list2) return list1;
if(list1.val <= list2.val) {
list1.next = mergeTwoLists(list1.next, list2);
return list1;
} else {
list2.next = mergeTwoLists(list1, list2.next);
return list2;
}
};Runtime: 145 ms, faster than 14.29% of JavaScript online submissions for Merge Two Sorted Lists.
Memory Usage: 43.9 MB, less than 6.58% of JavaScript online submissions for Merge Two Sorted Lists.
方法三
創建一個 dummy node 改良方法一
var mergeTwoLists = function(list1, list2) {
const dummy = new ListNode(-1);
let head = dummy;
while(list1 && list2) {
if(list1.val <= list2.val) {
head.next = list1;
list1 = list1.next;
} else {
head.next = list2;
list2 = list2.next;
}
head = head.next;
}
head.next = list1 === null ? list2 : list1;
return dummy.next;
};Runtime: 117 ms, faster than 37.19% of JavaScript online submissions for Merge Two Sorted Lists.
Memory Usage: 44 MB, less than 5.97% of JavaScript online submissions for Merge Two Sorted Lists.
Time complexity : O(n+m)
Space complexity : O(1)
Last updated
Was this helpful?