我需要使用合并排序对链接列表进行排序。我把这段代码放在一起,但我遇到了一个奇怪的错误。
我的链接列表由随机数填充。但是,排序后,它只按排序顺序显示大于链接列表第一个元素的数字。
以下是我的一些代码:
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;
}
}
答案 0 :(得分:2)
我已尝试过您的代码,但效果非常好。
你到底看过正确的名单了吗? 你的新名单不是以前的头,而是返回值 合并功能。
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);
}
}