Указатель не передается во время замены связанного списка - PullRequest
0 голосов
/ 30 апреля 2018

Скорее всего, это будет похоже на то, что я упускаю что-то очевидное, но когда я пытаюсь передать указатель связанного списка в сортировку 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;
}

Я не уверен, почему это не передается обратно в ту же функцию, когда я отлаживаю связанный список кажется нормальным. Я подозреваю, что мне не хватает чего-то в функции узла подкачки, но я не совсем понимаю, что это такое. Может, кто-нибудь подскажет, как этот код должен обмениваться узлами?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

1 Ответ

0 голосов
/ 01 мая 2018

SortList (TempHead-> link, * SortMethod); должен быть указан как SortList (& TempHead, * SortMethod);

Чтобы правильно передать указатель.

...