связанный список, голова всегда установлена ​​в NULL - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь добавить рассказы о домино в связанный список, но каждый раз, когда я вызываю функцию add_domino(struct Domino *list, int a ,int b), голова всегда остается NULL:

void add_domino(struct Domino *list, int a ,int b) {
    struct Domino *D = malloc(sizeof(struct Domino));
    D->a = a;
    D->b = b;
    D->next = NULL;

    if(list == NULL) {
        list = D;
    } else {
        struct Domino *p;
        p = list;
        while(p->next != NULL) {
            p = p->next;
        }
        p->next = D;
    }
}

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Либо верните обновленный указатель головы, и используйте его как:

struct Domino* list = NULL;
list = add_domino(list, 1, 2);

Или передайте указатель на указатель и используйте его следующим образом:

struct Domino* list = NULL;
add_domino(&list, 1, 2);

Кроме того, ваша функция не обрабатывает недостаток памяти.

Далее, предпочитайте sizeof *pointer, а не sizeof(TYPE), так как повторение подвержено ошибкам, особенно если компилятор не проверяет несовпадения.

И, наконец, рассмотрите возможность добавления в начало вместо хвоста, чтобы избежать многократного обхода всего списка. Обращение списка в конце, если это необходимо, является операцией с постоянным пробелом O (n).

0 голосов
/ 27 мая 2019

Вам не хватает возврата с обновленным указателем на голову.

struct Domino* add_domino(struct Domino *list, int a ,int b) {
    struct Domino *D = malloc(sizeof(struct Domino));
    D->a = a;
    D->b = b;
    D->next = NULL;

    if(list == NULL) {
        list = D;
        return list;
    } else {
        struct Domino *p;
        p = list;
        while(p->next != NULL) {
            p = p->next;
        }
        p->next = D;
    }
  return list;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...