πDay 3. Merge Two Sorted Linked Lists π§
The problem can be found at the following link: Problem Link
π‘ Problem Description:
Given the heads of two sorted linked lists, the task is to merge the two lists into a single sorted linked list and return the head of the merged list.
π Example Walkthrough:
Example 1:
Input:
head1 = 5 -> 10 -> 15 -> 40
head2 = 2 -> 3 -> 20
Output:
2 -> 3 -> 5 -> 10 -> 15 -> 20 -> 40
Explaination:
Example 2:
Input:
head1 = 1 -> 1
head2 = 2 -> 4
Output:
1 -> 1 -> 2 -> 4
Constraints:
1 <= no. of nodes<= $10^3$
$
0 <= node->data <= 10^5
$
π― My Approach:
Iterative Approach:
Create a dummy node to simplify the merging process and maintain a pointer
tail
starting at the dummy node.Traverse both linked lists using two pointers,
head1
andhead2
.Compare the data of the current nodes from both lists.
Attach the node with the smaller value to
tail
and move the pointer of the respective list.
Once one of the lists is completely traversed, attach the remaining nodes of the other list to
tail
.Return the merged list starting from
dummy.next
.
π Time and Auxiliary Space Complexity
Expected Time Complexity: O(n + m), where
n
andm
are the lengths of the two linked lists. Each node is visited exactly once.Expected Auxiliary Space Complexity: O(1), as no additional space is used except for a few variables.
π Solution Code
Code (C)
struct Node* sortedMerge(struct Node* head1, struct Node* head2) {
struct Node dummy = {0, NULL}, *tail = &dummy;
while (head1 && head2) {
if (head1->data <= head2->data) {
tail->next = head1;
head1 = head1->next;
} else {
tail->next = head2;
head2 = head2->next;
}
tail = tail->next;
}
tail->next = head1 ? head1 : head2;
return dummy.next;
}
Code (C++)
Iterative Approach (Tail Insertion Merge)
class Solution {
public:
Node* sortedMerge(Node* head1, Node* head2) {
Node dummy(0), *tail = &dummy;
while (head1 && head2) {
tail->next = (head1->data <= head2->data) ? head1 : head2;
tail = tail->next;
if (head1->data <= head2->data) head1 = head1->next;
else head2 = head2->next;
}
tail->next = head1 ? head1 : head2;
return dummy.next;
}
};
Code (Java)
class Solution {
Node sortedMerge(Node head1, Node head2) {
Node dummy = new Node(0), tail = dummy;
while (head1 != null && head2 != null) {
tail.next = (head1.data <= head2.data) ? head1 : head2;
if (head1.data <= head2.data) head1 = head1.next;
else head2 = head2.next;
tail = tail.next;
}
tail.next = (head1 != null) ? head1 : head2;
return dummy.next;
}
}
Code (Python)
class Solution:
def sortedMerge(self, head1, head2):
dummy = Node(0)
tail = dummy
while head1 and head2:
if head1.data <= head2.data:
tail.next = head1
head1 = head1.next
else:
tail.next = head2
head2 = head2.next
tail = tail.next
tail.next = head1 or head2
return dummy.next
π― Contribution and Support:
For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: Any Questions. Letβs make this learning journey more collaborative!
β If you find this helpful, please give this repository a star! β
πVisitor Count
Last updated