Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Javascript Program To Merge A Linked List Into Another Linked List At Alternate Positions

  • Last Updated : 31 Mar, 2022

Given two linked lists, insert nodes of the second list into the first list at alternate positions of the first list. 
For example, if first list is 5->7->17->13->11 and second is 12->10->2->4->6, the first list should become 5->12->7->10->17->2->13->4->11->6 and second list should become empty. The nodes of the second list should only be inserted when there are positions available. For example, if the first list is 1->2->3 and the second list is 4->5->6->7->8, then the first list should become 1->4->2->5->3->6 and the second list to 7->8.
Use of extra space is not allowed (Not allowed to create additional nodes), i.e., insertion must be done in-place. The expected time complexity is O(n) where n is a number of nodes in the first list. 

The idea is to run a loop while there are available positions in first loop and insert nodes of second list by changing pointers. Following are implementations of this approach. 


// Javascript program to merge a linked list
// into another at alternate positions
// A nexted list node
class Node
    { = 0; = null;
/* Function to insert a node at
   the beginning */
function push(head_ref, new_data)
    var new_node = new Node(); = new_data; = (head_ref);
    (head_ref) = new_node;
    return head_ref;
/* Utility function to print a
   singly linked list */
function printList(head)
    var temp = head;
    while (temp != null)
        document.write( + " ");
        temp =;
// Main function that inserts nodes of
// linked list q into p at alternate
// positions. Since head of first list
// never changes and head of second list
// may change, we need single pointer for
// first list and double pointer for second
// list.
function merge(p, q)
    var p_curr = p, q_curr = q;
    var p_next, q_next;
    // While there are available positions
    // in p
    while (p_curr != null && 
           q_curr != null)
        // Save next pointers
        p_next =;
        q_next =;
        // Make q_curr as next of p_curr
        // Change next pointer of q_curr = p_next;
        // Change next pointer of p_curr = q_curr;
        // Update current pointers for next
        // iteration
        p_curr = p_next;
        q_curr = q_next;
    // Update head pointer of second list
    q = q_curr; 
    return q;
// Driver code
var p = null, q = null;
p = push(p, 3);
p = push(p, 2);
p = push(p, 1);
         "First Linked List:<br>");
q = push(q, 8);
q = push(q, 7);
q = push(q, 6);
q = push(q, 5);
q = push(q, 4);
         "Second Linked List:<br>");
q = merge(p, q);
         "Modified First Linked List:<br>");
         "Modified Second Linked List:<br>");
// This code is contributed by rrrtnx.


First Linked List:
1 2 3
Second Linked List:
4 5 6 7 8
Modified First Linked List:
1 4 2 5 3 6
Modified Second Linked List:
7 8 

Time Complexity: O(N)

Auxiliary Space: O(1)

Please refer complete article on Merge a linked list into another linked list at alternate positions for more details!

My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!