What if you could combine two sorted lists perfectly without lifting a finger?
Why Merge Two Sorted Linked Lists in DSA Python?
Imagine you have two lists of names sorted alphabetically on paper. You want to combine them into one big sorted list. Doing this by hand means checking each name one by one, comparing, and writing them down in order.
Manually merging two sorted lists is slow and tiring. You can easily lose track of which name comes next or accidentally skip or repeat names. It's hard to keep the order perfect without making mistakes.
Using the "Merge Two Sorted Lists" method, a computer can quickly and correctly combine two sorted lists by comparing their first items and picking the smaller one step-by-step. This keeps the order intact and avoids mistakes.
list1 = ['Alice', 'Charlie', 'Emma'] list2 = ['Bob', 'David', 'Frank'] merged = [] # Manually compare and add each element one by one
def merge_lists(list1, list2): # Automatically merge two sorted lists merged = [] i = j = 0 while i < len(list1) and j < len(list2): if list1[i] < list2[j]: merged.append(list1[i]) i += 1 else: merged.append(list2[j]) j += 1 merged.extend(list1[i:]) merged.extend(list2[j:]) return merged
This concept lets us combine sorted data quickly and correctly, which is key for many fast and efficient programs.
When you get two sorted contact lists from different phones and want to combine them into one sorted list without duplicates or mistakes.
Merging by hand is slow and error-prone.
Automated merging compares and picks elements step-by-step.
This keeps the combined list sorted and accurate.
Practice
Solution
Step 1: Understand the merging process
Merging two sorted linked lists means combining them into one list that keeps the sorted order.Step 2: Identify the goal
The goal is to have a new linked list that contains all elements from both lists in sorted order.Final Answer:
To create a new sorted linked list containing all elements from both lists -> Option AQuick Check:
Merging = combine sorted lists [OK]
- Thinking merging reverses lists
- Only finding largest element
- Removing duplicates instead of merging
Solution
Step 1: Initialize dummy and current nodes properly
We create a dummy node with value 0 and set current to dummy to build the merged list.Step 2: Check options for correct syntax
def mergeLists(l1, l2): dummy = ListNode(0) current = dummy correctly creates dummy and current pointing to dummy. def mergeLists(l1, l2): dummy = ListNode(0) current = dummy.next incorrectly sets current = dummy.next which is initially None.Final Answer:
def mergeLists(l1, l2): dummy = ListNode(0) current = dummy -> Option CQuick Check:
Dummy node with value 0 starts merge [OK]
- Setting current to dummy.next
- Swapping dummy and current incorrectly
- Setting dummy to null
Solution
Step 1: Compare nodes from both lists in order
Start with 1 (List 1) and 2 (List 2). 1 is smaller, add 1. Then compare 3 and 2, add 2. Continue comparing and adding smaller nodes.Step 2: Build merged list step-by-step
Merged list becomes 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> null after adding all nodes in sorted order.Final Answer:
1 -> 2 -> 3 -> 4 -> 5 -> 6 -> null -> Option BQuick Check:
Sorted merge combines nodes in ascending order [OK]
- Appending one list fully before the other
- Mixing node order incorrectly
- Skipping nodes during merge
def mergeLists(l1, l2):
dummy = ListNode(0)
current = dummy
while l1 and l2:
if l1.val < l2.val:
current.next = l1
l1 = l1.next
else:
current.next = l2
l2 = l2.next
current.next = l1 if l1 else l2
return dummy.nextSolution
Step 1: Check pointer updates inside the loop
After assigning current.next, the current pointer must move forward to current.next to continue building the list.Step 2: Identify missing current update
The code misses 'current = current.next' inside the while loop, causing an infinite loop or incorrect list.Final Answer:
The 'current' pointer is not moved forward inside the loop -> Option AQuick Check:
Move current forward after linking nodes [OK]
- Forgetting to move current pointer
- Returning wrong node
- Not handling empty lists (though not error here)
Solution
Step 1: Understand merging with an empty list
If one list is empty, the merged list is just the non-empty list as it is already sorted.Step 2: Apply to given lists
Since the second list is empty and the first is 0 -> 2 -> 4 -> null, the merged list remains 0 -> 2 -> 4 -> null.Final Answer:
0 -> 2 -> 4 -> null -> Option DQuick Check:
Merging with empty list returns the other list [OK]
- Returning null when one list is empty
- Reversing the non-empty list
- Returning only the first node
Ready to prove it?
Pass the test and this pattern moves unknown
