Cree una nueva lista vinculada a partir de dos listas vinculadas dadas con un elemento mayor en cada Node

Dadas dos listas enlazadas del mismo tamaño, la tarea es crear una nueva lista enlazada usando esas listas enlazadas. La condición es que el Node mayor entre ambas listas enlazadas se agregará a la nueva lista enlazada.
Ejemplos: 
 

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

Enfoque: Atravesamos ambas listas enlazadas al mismo tiempo y comparamos el Node de ambas listas. El Node que sea mayor entre ellos se agregará a la nueva lista enlazada. Hacemos esto para cada Node. 
 

C++

// 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;
}

Java

// 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

Python3

# Python3 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
 
# Node class
class Node:
 
    # Function to initialise the node object
    def __init__(self, data):
        self.data = data
        self.next = None
 
# Function to insert node in a linked list
def insert(root, item):
 
    temp = Node(0)
    temp.data = item
    temp.next = None
 
    if (root == None):
        root = temp
    else :
        ptr = root
        while (ptr.next != None):
            ptr = ptr.next
 
        ptr.next = temp
         
    return root
 
# Function which returns new linked list
def newList(root1, root2):
 
    ptr1 = root1
    ptr2 = root2
     
    root = None
    while (ptr1 != None) :
        temp = Node(0)
        temp.next = None
 
        # Compare for greater node
        if (ptr1.data < ptr2.data):
            temp.data = ptr2.data
        else:
            temp.data = ptr1.data
 
        if (root == None):
            root = temp
        else :
            ptr = root
            while (ptr.next != None):
                ptr = ptr.next
 
            ptr.next = temp
         
        ptr1 = ptr1.next
        ptr2 = ptr2.next
     
    return root
 
def display(root):
 
    while (root != None) :
        print(root.data, "->", end = " ")
        root = root.next
     
    print(" ");
 
# Driver Code
if __name__=='__main__':
 
    root1 = None
    root2 = None
    root = None
 
    # First linked list
    root1 = insert(root1, 5)
    root1 = insert(root1, 2)
    root1 = insert(root1, 3)
    root1 = insert(root1, 8)
 
    print("First List: ", end = " ")
    display(root1)
 
    # Second linked list
    root2 = insert(root2, 1)
    root2 = insert(root2, 7)
    root2 = insert(root2, 4)
    root2 = insert(root2, 5)
 
    print("Second List: ", end = " ")
    display(root2)
 
    root = newList(root1, root2)
    print("New List: ", end = " ")
    display(root)
 
# This code is contributed by Arnab Kundu

C#

// 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

Javascript

<script>
// javascript 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
 
    // Representation of node
class Node {
    constructor(val) {
        this.data = val;
        this.next = null;
    }
}
    // Function to insert node in a linked list
    function insert( root , item) {
        var 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
    function newList( root1,  root2) {
        var ptr1 = root1, ptr2 = root2, ptr;
        var 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;
    }
 
    function display( root) {
        while (root != null) {
            document.write(root.data + "->");
            root = root.next;
        }
        document.write("<br/>");
    }
 
    // Driver code
     
         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);
 
        document.write("First List: ");
        display(root1);
 
        // Second linked list
        root2 = insert(root2, 1);
        root2 = insert(root2, 7);
        root2 = insert(root2, 4);
        root2 = insert(root2, 5);
 
        document.write("Second List: ");
        display(root2);
 
        root = newList(root1, root2);
        document.write("New List: ");
        display(root);
 
// This code is contributed by gauravrajput1
</script>
Producción: 

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

 

Complejidad de tiempo: O(n) donde n es el tamaño de la lista enlazada

Complejidad espacial : O(1) ya que usa espacio constante

Publicación traducida automáticamente

Artículo escrito por Premdeep Toppo y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *