我需要使用归并排序排序链表。我已经把这些代码放在一起了,但是我遇到了一个奇怪的错误。
我的链表由随机数填充。但是,在排序之后,它只显示比链表第一个元素大的数字,并按顺序显示。
下面是我的一些代码:
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);
}
}