21. Merge Two Sorted Lists
Merge Two Sorted Lists
You are given the heads of two sorted linked lists list1
and list2
.
Merge the two lists into 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]
Constraints:
- The number of nodes in both lists is in the range
[0, 50]
. -100 <= Node.val <= 100
- Both
list1
andlist2
are sorted in non-decreasing order.
Approach) Brute Force
In this fairly classic approach to a comparison question, we start by creating a while loop. This loop will run for as long as both LinkedLists contain a node, and in each iteration will compare the two available nodes, take the lower one, and finally move that LinkedList along to its next entry.
Once the loop is broken, the remaining elements of whichever LinkedList is not empty are then appended to the end of the new LinkedList (as there are no remaining values in the other LinkedList for them to be compared against).
Code:
var mergeTwoLists = function (l1, l2) {
// Initialise a new LinkedList with a dummy ListNode
let newList = new ListNode(0);
// Maintain a reference to the head of the new LinkedList
let headOfNewList = newList;
// Whilst both of the passed in lists contain more elements
while (l1 != null && l2 != null) {
// If l1's value is smaller
if (l1.val < l2.val) {
// Add l1's value to the new list
newList.next = l1;
// Move l1 to its next element
l1 = l1.next;
} else {
// Add l2's value to the new list
newList.next = l2;
// Move l2 to its next element
l2 = l2.next;
}
// Move into the next level of the LinkedList for the next iteration
newList = newList.next;
}
// If l1 has run out of elements
if (l1 == null) {
// Append l2 to the new list
newList.next = l2;
}
// If l2 has run out of elements
else {
// Append l1 to the new list
newList.next = l1;
}
return headOfNewList.next;
};
Approach) Recursion
var mergeTwoLists = function (l1, l2) {
// If either list is empty, return the other list's node
if (l1 == null) return l2;
if (l2 == null) return l1;
// If l1 is lower
if (l1.val < l2.val) {
l1.next = mergeTwoLists(l1.next, l2);
return l1;
}
// If l2 is lower
else {
l2.next = mergeTwoLists(l1, l2.next);
return l2;
}
};
That’s all folks! In this post, we solved LeetCode problem #21. Merge Two Sorted Lists
I hope you have enjoyed this post. Feel free to share your thoughts on this.
You can find the complete source code on my GitHub repository. If you like what you learn. feel free to fork 🔪 and star ⭐ it.
In this blog, I have tried to solve leetcode questions & present the most important points to consider when improving Data structure and logic, feel free to add, edit, comment, or ask. For more information please reach me here
Happy coding!
Comments
Post a Comment