Остановить условие для печати связанных структур? - PullRequest
2 голосов
/ 02 февраля 2010

У меня есть следующая структура:

struct cell {
    int nmbr;
    struct cell *p;
};

Я создал цепочку связанных структур из этого типа. Каждая структура связана со своим предшественником через * p. Если я решу распечатать все nmbr с рекурсивным алгоритмом, как показано ниже, как мне определить условие остановки?

void write(struct cell* l) {
    /* The following if statement doesn't solve my problem,
       but hopefully you see what I'm trying to do */
    if (&l != 0x000000) {
        printf("%d \t", l->nmbr);
        write(l->p);
    }
}

Ответы [ 5 ]

3 голосов
/ 02 февраля 2010

Вы хотите

if (l != 0)

или

if (l != NULL)

Конечно, вам также необходимо убедиться, что хвосту вашего связанного списка также присвоено p назначено NULL;в противном случае он будет неинициализирован и, вероятно, будет не NULL, но в любом случае недействительным.

2 голосов
/ 02 февраля 2010

Вы должны проверить, чтобы 'l' не было NULL, а не '& l', предполагая, что связанный список в NULL завершен.

1 голос
/ 02 февраля 2010

Как уже говорили другие, вы должны проверить l (el), а не & l, против 0 или NULL.Итак, ваша функция должна выглядеть примерно так:

void write(CELL* l) {
    if (l != 0x000000) {
        printf("%d \t", l->nmbr);
        write(l->p);
    }
}

Тем не менее, легко выполнить то же самое, используя некоторое время, избегая при этом затрат на рекурсию:

  list_pos = list_head;
  while (list_pos != NULL) {
    printf("%d \t", list_pos->nmbr);
    list_pos = list_pos -> p;
  }
1 голос
/ 02 февраля 2010

Предполагая, что связанный список не является циклическим, вы просто останавливаетесь, когда достигаете нулевого указателя. Изменить

if (&l != 0x000000)

до

if (l != NULL)
0 голосов
/ 02 февраля 2010

номер печати для текущего узла.

if (l-> p! = NULL)
write (l-> p);

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