PXProLearnX
Sign in (soon)
Data Structures and Algorithmsmediumconcept

How do you merge two sorted linked lists?

Explanation:

Merging two sorted linked lists is a common problem that tests your understanding of linked lists and your ability to manipulate pointers. The goal is to combine two sorted linked lists into one sorted linked list efficiently. This problem can be solved using a two-pointer technique. You start with pointers at the heads of both lists and compare the elements, merging them in sorted order into a new linked list.

Key Talking Points:

  • Efficiency: The problem can be solved in O(n + m) time complexity, where n and m are the lengths of the two linked lists.
  • In-place Merge: The merging process can be done in-place, using only O(1) additional space, by adjusting the pointers of the existing nodes.
  • Two-pointer Technique: This technique is crucial for efficiently traversing and manipulating linked lists.

NOTES:

Reference Table:

AspectMerging Sorted ArraysMerging Sorted Linked Lists
Time ComplexityO(n + m)O(n + m)
Space ComplexityO(n + m) (new array)O(1) (in-place with pointers)
Data StructureArraysLinked Lists
In-place ModificationNoYes

Pseudocode:

Here’s a simple way to merge two sorted linked lists using a dummy node to simplify edge cases:

class ListNode:
    def __init__(self, value=0, next=None):
        self.value = value
        self.next = next

def mergeTwoLists(l1, l2):
    # Create a dummy node to act as the head of the merged list
    dummy = ListNode()
    current = dummy

    # While both lists are non-empty, merge the nodes
    while l1 and l2:
        if l1.value < l2.value:
            current.next = l1
            l1 = l1.next
        else:
            current.next = l2
            l2 = l2.next
        current = current.next

    # If there are remaining nodes in either list, append them
    current.next = l1 if l1 else l2

    return dummy.next

Follow-Up Questions and Answers:

  1. What if the linked lists are not sorted?

    • Answer: If the linked lists are not sorted, you would need to sort them first, which would require additional time. You could use a sorting algorithm like merge sort, which is efficient for linked lists, but this would change the initial time complexity.
  2. How would you modify the algorithm to merge k sorted linked lists?

    • Answer: To merge k sorted linked lists, you can use a min-heap (priority queue) to efficiently track the smallest current head across all lists. This approach maintains a time complexity of O(n log k), where n is the total number of nodes across all lists.
  3. Can you perform the merge iteratively without using a dummy node?

    • Answer: Yes, while a dummy node simplifies the logic, you can perform the merge iteratively by carefully initializing the head of the resulting list based on the first comparison and then proceeding similarly to adjust pointers. However, this can complicate edge cases, particularly when one list is empty initially.
Want all 100 questions?
Get the full book on Amazon — paperback, Kindle, or hardcover.