Как добавить несколько узлов в связанный список в C без указателя головы / хвоста? - PullRequest
0 голосов
/ 30 марта 2019

У меня есть многослойный связанный список со списком пациентов, каждый список пациентов указывает на связанный список с пациентами, каждый пациент указывает на связанный список врачей. Я пытаюсь добавить несколько докторов, но когда я пытаюсь отобразить докторов, я получаю бесконечный цикл, как будто нет следующего указателя, указывающего на NULL. Если это только один врач, все работает нормально.

Я пробовал несколько подходов, таких как установка старого узла на временный указатель и затем установка нового узла для указания на временный. Мой связанный список пациентов и связанный список пациентов работают на 100%.

struct doctor {
char name[MAX_NAME];
struct doctor *next;
};
void addDoctor(char* patientNameInput, char* doctorNameInput)
{
struct patientList* tempList = list;   // work on a copy of 'list'
int i = 0;

struct doctor* newDoctorNode = NULL;
newDoctorNode = (struct doctor*) malloc(sizeof(struct doctor));
struct doctor* tmp = NULL;

while (tempList != NULL)
{
    while (tempList->patient->name[i] == patientNameInput[i])
    {
        if (tempList->patient->name[i] == '\0')
        {
            tempList->patient->doctors = newDoctorNode;
            newDoctorNode->next = NULL;

        for (int i = 0; i < 30; i++)
        tempList->patient->doctors->name[i] = doctorNameInput[i];
        }
        i++;
    }
    tempList = tempList->next;
}

}

Функция ищет имя пациента и соответствующий список связанных списков пациентов. Когда он найден, он добавляет узел доктора для соответствующего пациента. Если я включу мою старую попытку временного указателя и выведу функцию, я получу бесконечный цикл. Я ожидаю, что вывод сможет отображать более 1 врача без ошибок.

1 Ответ

1 голос
/ 30 марта 2019

Измените следующее:

        tempList->patient->doctors = newDoctorNode;
        newDoctorNode->next = NULL;

до:

        newDoctorNode->next = tempList->patient->doctors;
        tempList->patient->doctors = newDoctorNode;

Это добавит новый узел доктора в начало существующего списка докторов. Если вместо этого вы хотите добавить его в конец, то вам нужно пройти по списку, чтобы найти конец.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...