Create new linked list from two given linked list with greater element at each node

Given two linked list of the same size, the task is to create a new linked list using those linked lists. The condition is that the greater node among both linked list will be added to the new liked list.

Examples:

Input:  list1 = 5->2->3->8
list2 = 1->7->4->5
Output:  New list = 5->7->4->8

Input: list1 = 2->8->9->3
list2 = 5->3->6->4
Output:  New list = 5->8->9->4

Approach: We traverse both the linked list at the same time and compare node of both lists. The node which is greater among them will be added to the new linked list. We do this for each node.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// C++ program to create a new linked list
// from two given linked list
// of the same size with
// the greater element among the two at each node
  
#include <iostream>
using namespace std;
  
// Representation of node
struct Node {
    int data;
    Node* next;
};
  
// Function to insert node in a linked list
void insert(Node** root, int item)
{
    Node *ptr, *temp;
    temp = new Node;
    temp->data = item;
    temp->next = NULL;
  
    if (*root == NULL)
        *root = temp;
    else {
        ptr = *root;
        while (ptr->next != NULL)
            ptr = ptr->next;
  
        ptr->next = temp;
    }
}
  
// Function which returns new linked list
Node* newList(Node* root1, Node* root2)
{
    Node *ptr1 = root1, *ptr2 = root2, *ptr;
    Node *root = NULL, *temp;
  
    while (ptr1 != NULL) {
        temp = new Node;
        temp->next = NULL;
  
        // Compare for greater node
        if (ptr1->data < ptr2->data)
            temp->data = ptr2->data;
        else
            temp->data = ptr1->data;
  
        if (root == NULL)
            root = temp;
        else {
            ptr = root;
            while (ptr->next != NULL)
                ptr = ptr->next;
  
            ptr->next = temp;
        }
        ptr1 = ptr1->next;
        ptr2 = ptr2->next;
    }
    return root;
}
  
void display(Node* root)
{
    while (root != NULL) {
        cout << root->data << "->";
        root = root->next;
    }
  
    cout << endl;
}
  
// Driver code
int main()
{
    Node *root1 = NULL, *root2 = NULL, *root = NULL;
  
    // First linked list
    insert(&root1, 5);
    insert(&root1, 2);
    insert(&root1, 3);
    insert(&root1, 8);
  
    cout << "First List:  ";
    display(root1);
  
    // Second linked list
    insert(&root2, 1);
    insert(&root2, 7);
    insert(&root2, 4);
    insert(&root2, 5);
  
    cout << "Second List: ";
    display(root2);
  
    root = newList(root1, root2);
    cout << "New List:    ";
    display(root);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java program to create a new linked list 
// from two given linked list 
// of the same size with 
// the greater element among the two at each node 
import java.util.*;
  
class GFG
{
  
// Representation of node 
static class Node 
    int data; 
    Node next; 
}; 
  
// Function to insert node in a linked list 
static Node insert(Node root, int item) 
    Node ptr, temp; 
    temp = new Node(); 
    temp.data = item; 
    temp.next = null
  
    if (root == null
        root = temp; 
    else
        ptr = root; 
        while (ptr.next != null
            ptr = ptr.next; 
  
        ptr.next = temp; 
    
    return root;
  
// Function which returns new linked list 
static Node newList(Node root1, Node root2) 
    Node ptr1 = root1, ptr2 = root2, ptr; 
    Node root = null, temp; 
  
    while (ptr1 != null) { 
        temp = new Node(); 
        temp.next = null
  
        // Compare for greater node 
        if (ptr1.data < ptr2.data) 
            temp.data = ptr2.data; 
        else
            temp.data = ptr1.data; 
  
        if (root == null
            root = temp; 
        else
            ptr = root; 
            while (ptr.next != null
                ptr = ptr.next; 
  
            ptr.next = temp; 
        
        ptr1 = ptr1.next; 
        ptr2 = ptr2.next; 
    
    return root; 
  
static void display(Node root) 
    while (root != null
    
        System.out.print( root.data + "->"); 
        root = root.next; 
    
    System.out.println();
  
// Driver code 
public static void main(String args[])
    Node root1 = null, root2 = null, root = null
  
    // First linked list 
    root1=insert(root1, 5); 
    root1=insert(root1, 2); 
    root1=insert(root1, 3); 
    root1=insert(root1, 8); 
  
    System.out.print("First List: "); 
    display(root1); 
  
    // Second linked list 
    root2=insert(root2, 1); 
    root2=insert(root2, 7); 
    root2=insert(root2, 4); 
    root2=insert(root2, 5); 
  
    System.out.print( "Second List: "); 
    display(root2); 
  
    root = newList(root1, root2); 
    System.out.print("New List: "); 
    display(root); 
}
  
// This code is contributed by Arnab Kundu

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# program to create a new linked list 
// from two given linked list 
// of the same size with 
// the greater element among the two at each node 
using System;
      
class GFG
{
  
// Representation of node 
public class Node 
    public int data; 
    public Node next; 
}; 
  
// Function to insert node in a linked list 
static Node insert(Node root, int item) 
    Node ptr, temp; 
    temp = new Node(); 
    temp.data = item; 
    temp.next = null
  
    if (root == null
        root = temp; 
    else
    
        ptr = root; 
        while (ptr.next != null
            ptr = ptr.next; 
  
        ptr.next = temp; 
    
    return root;
  
// Function which returns new linked list 
static Node newList(Node root1, Node root2) 
    Node ptr1 = root1, ptr2 = root2, ptr; 
    Node root = null, temp; 
  
    while (ptr1 != null)
    
        temp = new Node(); 
        temp.next = null
  
        // Compare for greater node 
        if (ptr1.data < ptr2.data) 
            temp.data = ptr2.data; 
        else
            temp.data = ptr1.data; 
  
        if (root == null
            root = temp; 
        else 
        
            ptr = root; 
            while (ptr.next != null
                ptr = ptr.next; 
  
            ptr.next = temp; 
        
        ptr1 = ptr1.next; 
        ptr2 = ptr2.next; 
    
    return root; 
  
static void display(Node root) 
    while (root != null
    
        Console.Write( root.data + "->"); 
        root = root.next; 
    
    Console.WriteLine();
  
// Driver code 
public static void Main(String []args)
    Node root1 = null, root2 = null, root = null
  
    // First linked list 
    root1 = insert(root1, 5); 
    root1 = insert(root1, 2); 
    root1 = insert(root1, 3); 
    root1 = insert(root1, 8); 
  
    Console.Write("First List: "); 
    display(root1); 
  
    // Second linked list 
    root2 = insert(root2, 1); 
    root2 = insert(root2, 7); 
    root2 = insert(root2, 4); 
    root2 = insert(root2, 5); 
  
    Console.Write( "Second List: "); 
    display(root2); 
  
    root = newList(root1, root2); 
    Console.Write("New List: "); 
    display(root); 
}
  
// This code has been contributed by 29AjayKumar

chevron_right


Output:

First List:  5->2->3->8->
Second List: 1->7->4->5->
New List:    5->7->4->8->


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : andrew1234, 29AjayKumar