c++ - 合并排序链表

标签 c++ linked-list mergesort

我需要使用合并排序对链表进行排序。我已将这段代码放在一起,但遇到了一个奇怪的错误。

我的链接列表由随机数填充。但是,排序后,它仅按排序顺序显示大于链表第一个元素的数字。

这是我的一些代码:

node* MergeSort(node *my_node)
{
    node *secondNode;

    if (my_node == NULL)
        return NULL;
    else if (my_node->next == NULL)
        return my_node;
    else
    {
        secondNode = Split(my_node);
        return Merge(MergeSort(my_node),MergeSort(secondNode));
    }
}

node* Merge(node* firstNode, node* secondNode)
{
    if (firstNode == NULL) return secondNode;
    else if (secondNode == NULL) return firstNode;
    else if (firstNode->number <= secondNode->number) //if I reverse the sign to >=, the behavior reverses
    {
        firstNode->next = Merge(firstNode->next, secondNode);
        return firstNode;
    }
    else 
    {
        secondNode->next = Merge(firstNode, secondNode->next);
        return secondNode;
    }
}

node* Split(node* my_node)
{
    node* secondNode;

    if (my_node == NULL) return NULL;
    else if (my_node->next == NULL) return NULL;
    else {
        secondNode = my_node->next;
        my_node->next = secondNode->next;
        secondNode->next = Split(secondNode->next);
        return secondNode;
    }
}

最佳答案

我试过你的代码,它运行得很好。

你最后看对榜单了吗? 您的列表的新头部不是以前的头部,而是返回值 合并功能。

printList(myList);
node* sortedList =  MergeSort(myList);
printList(sortedList); //whole list sorted
printList(myList); //list (of elements not smaller that first element) sorted

和 printList() 是显而易见的功能:

void printList(node* my_node){
    if(my_node == NULL) return;
    else {
        std::cout<<my_node->number<<" "<<std::endl; 
        printList(my_node->next);   
    }
}

关于c++ - 合并排序链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5630994/

相关文章:

c - 撤消功能在达到游戏初始状态后无法正常工作

c - 将变量分配给链接列表中的下一项

python - 合并排序python无限循环

python - 有没有办法在找到第一个排序的 k 元素之前在 python 中对列表进行排序?

C++,再次调用单例类的析构函数

c++ - 如何使用模板元编程重构此循环?

c++ - 输出到控制台重叠

c++ - 关于 reference_wrapper 和可调用对象

java - 如何在 Java 中向链表添加项目?

arrays - 如何在不使用额外数组来分割初始数组的情况下进行合并排序?