2 Stimmen

Stop-Bedingung für das Drucken von verknüpften Strukturen?

Ich habe die folgende Struktur:

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

Ich habe eine Kette von verknüpften Strukturen von diesem Typ erstellt. Jede Struktur ist mit ihrem Vorgänger über *p verbunden. Wenn ich beschließe, alle nmbr s mit einem rekursiven Algorithmus wie unten gezeigt, wie definiere ich die Stopp-Bedingung?

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);
    }
}

3voto

Nick Meyer Punkte 37405

Sie wollen

if (l != 0)

または

if (l != NULL)

Natürlich müssen Sie auch sicherstellen, dass das Ende Ihrer verknüpften Liste über p zugewiesen NULL auch; andernfalls wird es nicht initialisiert und wahrscheinlich etwas nicht NULL aber trotzdem ungültig.

2voto

Jay Punkte 23175

Sie sollten prüfen, ob 'l' nicht NULL ist, anstatt '&l' in der Annahme zu verwenden, dass die verknüpfte Liste in NULL terminiert ist.

1voto

nos Punkte 214143

Angenommen, die verknüpfte Liste ist nicht zyklisch, dann hört man einfach auf, wenn man einen Null-Zeiger erreicht. ändern

if (&l != 0x000000)

zu

if (l != NULL)

1voto

GreenMatt Punkte 17578

Wie andere bereits gesagt haben, sollten Sie l (el), nicht &l, gegen 0 oder NULL prüfen. Ihre Funktion sollte also etwa so aussehen:

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

Es ist jedoch einfach, das Gleiche mit einem while zu erreichen, wodurch der Overhead der Rekursion vermieden wird:

  list_pos = list_head;
  while (list_pos != NULL) {
    printf("%d \t", list_pos->nmbr);
    list_pos = list_pos -> p;
  }

-1voto

Chris H Punkte 6087

Die Drucknummer hier oben für den aktuellen Knoten.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X