Merge Two Sorted Lists

Procedure to merge two sorted linked lists.

void merge(struct node *first, struct node *second) {

    // A pointer to keep track of last node of merged list
    struct node *last;
    
    // First node of merged list
    if (first -> data < second -> data) {
        // Set head and tail of merged list
        third = last = first;
        // Move forward in first list
        first = first -> next;
    } else {
        // Set head and tail of merged list
        third = last = second;
        // Move forward in second list
        second = second -> next;
    }
    third -> next = NULL;
    
    // Remaining node of merged list
    while (first && second) {
        if(first -> data < second -> data) {
            // Next node will be first's node
            last -> next = first;
            // Update the last pointer
            last = first;
            first = first -> next;
        } else {
            // Next node will be second's node
            last -> next = second;
            // Update the last pointer
            last = second;
            second = second -> next;
        }
    }
    
    // Merging remaining elements of first list (if any)
    if (first) {
        last -> next = first;
    }
    
    // Merging remaining elements of second list (if any)
    if (second) {
        last -> next  = second;
    }

}

Contributed by Nitin Ranganath

Last updated