📌  相关文章
📜  按出现在数组中的元素的顺序对链接列表进行排序

📅  最后修改于: 2021-04-29 06:23:52             🧑  作者: Mango

给定一个大小为N的数组和一个链表,链表中的元素将来自该数组,但也可以重复,按顺序对链表进行排序,则元素将出现在数组中。可以假定该数组覆盖了链表的所有元素。

arr [] =

清单=

排序清单=

在亚马逊问

首先,创建一个散列表,以存储链表中元素的频率。然后,只需遍历列表,并针对arr [i]的每个元素检查has表中的频率,并通过arr [i]元素修改列表数据,直到达到其频率,最后打印该列表。

C++
// Efficient CPP program to sort given list in order
// elements are appearing in an array
#include 
using namespace std;
  
// Linked list node
struct Node {
    int data;
    struct Node* next;
};
  
// function prototype for printing the list
void printList(struct Node*);
  
// Function to insert a node at the
// beginning of the linked list
void push(struct Node** head_ref, int new_data)
{
    struct Node* new_node = new Node;
    new_node -> data = new_data;
    new_node -> next = *head_ref;
    *head_ref = new_node;
}
  
// function to print the linked list
void printList(struct Node* head)
{
    while (head != NULL) {
        cout << head -> data << " -> ";
        head = head -> next;
    }
}
  
// Function that sort list in order of apperaing
// elements in an array
void sortlist(int arr[], int N, struct Node* head)
{
    // Store frequencies of elements in a
    // hash table.
    unordered_map hash;
    struct Node* temp = head;
    while (temp) {        
        hash[temp -> data]++;
        temp = temp -> next;
    }
  
    temp = head;
   
    // One by one put elements in lis according
    // to their appearance in array
    for (int i = 0; i < N; i++) {        
  
        // Update 'frequency' nodes with value 
        // equal to arr[i]
        int frequency = hash[arr[i]];
        while (frequency--) {
  
            // Modify list data as element 
            // appear in an array
            temp -> data = arr[i];
            temp = temp -> next;
        }
    }
}
  
// Driver Code
int main()
{
    struct Node* head = NULL;
    int arr[] = { 5, 1, 3, 2, 8 };
    int N = sizeof(arr) / sizeof(arr[0]);
  
    // creating the linked list
    push(&head, 3);
    push(&head, 2);
    push(&head, 5);
    push(&head, 8);
    push(&head, 5);
    push(&head, 2);
    push(&head, 1);
  
    // Function call to sort the list in order
    // elements are apperaing in an array
    sortlist(arr, N, head);
  
    // print the modified linked list
    cout << "Sorted List:" << endl;
    printList(head);
    return 0;
}


Java
// Efficient JAVA program to sort given list in order
// elements are appearing in an array
import java.util.*;
  
class GFG
{
  
// Linked list node
static class Node
{
    int data;
    Node next;
};
  
// Function to insert a node at the
// beginning of the linked list
static Node push(Node head_ref, int new_data)
{
    Node new_node = new Node();
    new_node.data = new_data;
    new_node.next = head_ref;
    head_ref = new_node;
    return head_ref;
}
  
// function to print the linked list
static void printList(Node head)
{
    while (head != null)
    {
        System.out.print(head.data+ "->");
        head = head.next;
    }
}
  
// Function that sort list in order of apperaing
// elements in an array
static void sortlist(int arr[], int N, Node head)
{
    // Store frequencies of elements in a
    // hash table.
    HashMap hash = new HashMap();
    Node temp = head;
    while (temp != null) 
    { 
        if(hash.containsKey(temp.data))
            hash.put(temp.data,hash.get(temp.data) + 1);
        else
            hash.put(temp.data,1);
        temp = temp.next;
    }
  
    temp = head;
  
    // One by one put elements in lis according
    // to their appearance in array
    for (int i = 0; i < N; i++) 
    {     
  
        // Update 'frequency' nodes with value 
        // equal to arr[i]
        int frequency = hash.get(arr[i]);
        while (frequency-->0) 
        {
  
            // Modify list data as element 
            // appear in an array
            temp.data = arr[i];
            temp = temp.next;
        }
    }
}
  
// Driver Code
public static void main(String[] args)
{
    Node head = null;
    int arr[] = { 5, 1, 3, 2, 8 };
    int N = arr.length;
  
    // creating the linked list
    head = push(head, 3);
    head = push(head, 2);
    head = push(head, 5);
    head = push(head, 8);
    head = push(head, 5);
    head = push(head, 2);
    head = push(head, 1);
  
    // Function call to sort the list in order
    // elements are apperaing in an array
    sortlist(arr, N, head);
  
    // print the modified linked list
    System.out.print("Sorted List:" +"\n");
    printList(head);
}
}
  
// This code is contributed by PrinciRaj1992


Python3
# Efficient Python3 program to sort given list in order
# elements are appearing in an array
  
# Linked list node
class Node:
    def __init__(self):
        self.data = 0
        self.next = None
  
# Function to insert a node at the
# beginning of the linked list
def push( head_ref, new_data):
  
    new_node = Node()
    new_node.data = new_data
    new_node.next = head_ref
    head_ref = new_node
    return head_ref
  
# function to print the linked list
def printList( head):
  
    while (head != None):
      
        print(head.data, end = "->")
        head = head.next
      
# Function that sort list in order of apperaing
# elements in an array
def sortlist( arr, N, head):
  
    # Store frequencies of elements in a
    # hash table.
    hash = dict()
    temp = head
    while (temp != None) :
      
        hash[temp.data] = hash.get(temp.data, 0) + 1
        temp = temp.next
      
    temp = head
  
    # One by one put elements in lis according
    # to their appearance in array
    for i in range(N): 
          
        # Update 'frequency' nodes with value 
        # equal to arr[i]
        frequency = hash.get(arr[i],0)
          
        while (frequency > 0) :
          
            frequency= frequency-1
            # Modify list data as element 
            # appear in an array
            temp.data = arr[i]
            temp = temp.next
          
# Driver Code
  
head = None
arr = [5, 1, 3, 2, 8 ]
N = len(arr)
  
# creating the linked list
head = push(head, 3)
head = push(head, 2)
head = push(head, 5)
head = push(head, 8)
head = push(head, 5)
head = push(head, 2)
head = push(head, 1)
  
# Function call to sort the list in order
# elements are apperaing in an array
sortlist(arr, N, head)
  
# print the modified linked list
print("Sorted List:" )
printList(head)
  
  
# This code is contributed by Arnab Kundu


C#
// Efficient C# program to sort given list in order
// elements are appearing in an array
using System;
using System.Collections.Generic;
  
class GFG
{
  
// Linked list node
public class Node
{
    public int data;
    public Node next;
};
  
// Function to insert a node at the
// beginning of the linked list
static Node push(Node head_ref, int new_data)
{
    Node new_node = new Node();
    new_node.data = new_data;
    new_node.next = head_ref;
    head_ref = new_node;
    return head_ref;
}
  
// function to print the linked list
static void printList(Node head)
{
    while (head != null)
    {
        Console.Write(head.data + "->");
        head = head.next;
    }
}
  
// Function that sort list in order of apperaing
// elements in an array
static void sortlist(int []arr, int N, Node head)
{
    // Store frequencies of elements in a
    // hash table.
    Dictionary hash = new Dictionary();
    Node temp = head;
    while (temp != null) 
    { 
        if(hash.ContainsKey(temp.data))
            hash[temp.data] = hash[temp.data] + 1;
        else
            hash.Add(temp.data, 1);
        temp = temp.next;
    }
    temp = head;
  
    // One by one put elements in lis according
    // to their appearance in array
    for (int i = 0; i < N; i++) 
    {     
  
        // Update 'frequency' nodes with value 
        // equal to arr[i]
        int frequency = hash[arr[i]];
        while (frequency-->0) 
        {
  
            // Modify list data as element 
            // appear in an array
            temp.data = arr[i];
            temp = temp.next;
        }
    }
}
  
// Driver Code
public static void Main(String[] args)
{
    Node head = null;
    int []arr = { 5, 1, 3, 2, 8 };
    int N = arr.Length;
  
    // creating the linked list
    head = push(head, 3);
    head = push(head, 2);
    head = push(head, 5);
    head = push(head, 8);
    head = push(head, 5);
    head = push(head, 2);
    head = push(head, 1);
  
    // Function call to sort the list in order
    // elements are apperaing in an array
    sortlist(arr, N, head);
  
    // print the modified linked list
    Console.Write("Sorted List:" + "\n");
    printList(head);
}
}
  
// This code is contributed by 29AjayKumar


输出 :

Sort list:
5 -> 5 -> 1 -> 3 -> 2 -> 2 -> 8