gpt4 book ai didi

c++ - 合并排序链表

转载 作者:行者123 更新时间:2023-11-30 04:35:04 24 4
gpt4 key购买 nike

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

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

这是我的一些代码:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com