给定两个大小相同的链表,任务是使用这些链表创建一个新的链表。条件是两个链接列表中的较大节点将被添加到新的喜欢列表中。
例子:
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
方法:我们同时遍历两个链表,并比较两个链表的节点。其中更大的节点将被添加到新的链表中。我们为每个节点执行此操作。
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
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
输出:
First List: 5->2->3->8->
Second List: 1->7->4->5->
New List: 5->7->4->8->