c++ - Merge-sorting a linked list -
i'm required sort linked list using merge sort. i've put code, i'm running weird error.
my linked list populated random numbers. however, after sorting, displays numbers larger first element of linked list, in sorted order.
here of code:
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 reverse sign >=, 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; } }
i have tried code , works perfectly.
have looked @ right list in end? new head of list not previous head, return value of merge function.
printlist(mylist); node* sortedlist = mergesort(mylist); printlist(sortedlist); //whole list sorted printlist(mylist); //list (of elements not smaller first element) sorted and printlist() obvious function:
void printlist(node* my_node){ if(my_node == null) return; else { std::cout<<my_node->number<<" "<<std::endl; printlist(my_node->next); } }
Comments
Post a Comment