Split og sortering af singly linked list?
Hejsa!Jeg prøver at sortere en singly linked list, og har hentet masser af fremragende hjælp i denne tråd: http://eksperten.dk/spm/417877 - problemet er bare, at jeg ikke helt kan få sorteringen til at fungere. Problemet er, at der sådan set slet ikke bliver ændret på rækkefølgen af elementerne i min linked list. Min tilpasning af algoritmen ser sådan her ud:
void sort(struct node *node)
{
struct node *HeaderO = NULL, *HeaderR = NULL, *first, *parent=NULL;
// HeaderO is the ordered list, HeaderR is the remaining elements of the old linked list
int i = 0; // Index variable for use in the loop
while (node) // As long as we're inside the original linked list
{
if (i == 0) // If we're at the start of the un-ordered list, we need to create our ordered list header
{
HeaderO = (struct node *) malloc(sizeof(struct node)); // Allocates memory
HeaderO->name = node->name;
HeaderO->grade = node->grade;
HeaderO->next = NULL; // Only has one node so far!
}
else
{
HeaderR = (struct node *) malloc(sizeof(struct node));
if (i == 1)
first = HeaderR;
HeaderR->name = node->name;
HeaderR->grade = node->grade;
HeaderR->next = NULL;
if(parent)
parent->next = HeaderR;
parent = HeaderR;
}
node = node->next;
i++;
}
}
Og den bliver kaldt med sort(start), hvor start er pointeren til det første element i min linked list, som jeg på forhånd har fået oprettet uden problemer. Sidenhen kalder jeg min funktion til udskrivning:
void printgrades(struct node *node) // Prints the name and grade of each node element
{
while(node)
{
printf("Name: %s, grade: %i\n", node->name, node->grade);
node = node->next;
}
}
Som bliver kaldt med printgrades(start). Når jeg gør dette, lader det ikke til, at der overhovedet er blevet gjort noget ved listens elementers rækkefølge... Hvad er det, jeg gør forkert og/eller overser? :-)
For god ordens skyld får I her min struct:
struct node
{
char* name;
int grade;
struct node* next;
};