首页 > 解决方案 > 对链表的值进行排序并打印它们

问题描述

我有一个清单:

struct node
{
    string name;
    int value;
    node* next;
};

例如,我将 5 个元素保存到它。

现在我想找到三个最大的元素。

node* help = head;

for (int i = 0; i < M; i++)
{
    node* help2 = head;
    while (help->next)
    {   
        if (help->next->value > help->value)
        {
            help2 = help->next;
        }
        help = help->next;
    }
    cout << help2->name;    
}

多亏了这一点,我才能找到最大的数字并显示它的名称。但我不知道如何找到第二个和第三个元素并显示它们。

标签: c++listsorting

解决方案


如果您不知道排序,请参阅此链接https://www.geeksforgeeks.org/sorting-algorithms/以更好地了解排序算法的概念和类型。在此示例中,我们使用冒泡排序算法按降序对元素进行排序 //按照您所说的链表中有 5 个元素对链表进行排序

 //n=5          i. e  size of linked list
for(int i=0;i<n;i++)//sorting logic for linked list to be in descending order
{
    temp=head;
    for(int j=0;j<n-1-i;j++)
    {
        if(temp->value<temp->next->value)
        {
            val=temp->value; //val is integer variable
            nm=temp->name; //nm is string variable
            temp->value=temp->next->value;
            temp->name=temp->next->name;
            temp->next->value=val;
            temp->next->name=nm;
        }
        temp=temp->next;
    }
}
temp=head;
for(int i=0;i<3;i++)// prints 3 elements as you want 3 greatest numbers
{
    cout<<temp->value<<endl;
    cout<<temp->name<<endl;
    temp=temp->next;
    
}

推荐阅读