Скорее всего, это будет похоже на то, что я упускаю что-то очевидное, но когда я пытаюсь передать указатель связанного списка в сортировку Selection, у меня возникает проблема с указателем NULL. В моем C-коде это связано со списком ссылок:
typedef struct iorb
{
int base_pri;
struct iorb *link;
char filler[100];
} IORB;
Затем я передаю свой новый связанный список в эту функцию после его создания:
void swapNodes(POINTER *head, POINTER CurrentHead, POINTER CurrentMinimum, POINTER TempSwap);
POINTER SortList(POINTER *head, char *SortMethod[])
{
POINTER TempHead = *head;
//Only one node, no need to sort.
if (TempHead->link == NULL)
{
return head;
}
//Store node with the new minimum value.
POINTER TempMin = *head;
//Store curent node for swapping
POINTER TempSwap = *head;
//Transverse the list.
POINTER TempCurrent;
for (TempCurrent = *head; TempCurrent->link != NULL; TempCurrent = TempCurrent->link)
{
//Check if this node has a lower priority than the current minimum and if so, swap them.
if (TempCurrent->link->base_pri < TempMin->base_pri)
{
TempMin = TempCurrent->link;
TempSwap = TempCurrent;
}
}
//Swap nodes if the head is not the same as the minimum.
if (TempMin != TempHead)
{
swapNodes(&TempHead, TempHead, TempMin, TempSwap);
}
//Recursively sort the rest of the list.
//FOR SOME REASON THE NODE POINTER IS NOT BEING PASSED HERE (EMPTY)
TempHead->link = SortList(TempHead->link, *SortMethod);
return head;
}
void swapNodes(POINTER *head, POINTER CurrentHead, POINTER CurrentMinimum, POINTER TempSwap)
{
//Set new head as the minimum.
*head = CurrentMinimum;
//Link the current temp swap to the head.
TempSwap->link = CurrentHead;
//Swap pointers.
POINTER temp = CurrentMinimum->link;
CurrentMinimum->link = CurrentHead->link;
CurrentHead->link = temp;
}
Я не уверен, почему это не передается обратно в ту же функцию, когда я отлаживаю связанный список кажется нормальным. Я подозреваю, что мне не хватает чего-то в функции узла подкачки, но я не совсем понимаю, что это такое. Может, кто-нибудь подскажет, как этот код должен обмениваться узлами?
Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.