2016-06-02 19 views
0

Wenn ich ein Element zur verknüpften Liste hinzufügen möchte, stürzt mein Programm ab. Dies sind meine structs, dass ichHinzufügen eines Elements in der verknüpften Liste C

bin mit
typedef struct seats 
    { 
    int number, reserved; 
    char name[1000]; 
    } seats; 
    // node list 
    typedef struct node 
    { 
    seats seat; 
    struct node * next; 
    } node_t; 

Und das ist meine insert Funktion

void AddSeat(node_t * head, seats a_seat) // unos podataka na kraj liste 
    { 
    node_t * current = head; 
    while (current->next != NULL) { 
     current = current->next; 
    } 

    /* now we can add a new variable */ 
    current->next = malloc(sizeof(node_t)); 
    current->next->seat = a_seat; 
    current->next->next = NULL; 
    } 
+1

Können Sie Ihre Frage bearbeiten, um den Code hinzuzufügen, wo Sie den allerersten Knoten für Ihre Liste erstellen, und auch den Code, an dem Sie AddSeat aufrufen? – shoover

+1

Sie versuchen, Sitze nach Wert zu übergeben. Sie müssen einen Zeiger auf Ihre Routine übergeben. – stark

+0

Es gelingt Ihnen, Sitzplätze nach Wert zu übergeben :) Leider ist das nicht, was Sie tun müssen, da Sie die Kopien der Zeiger nicht ändern :( –

Antwort

0

Eigentlich denke ich, Ihre Logik ist falsch.

In einer verknüpften Liste, die Sie mit einem leeren Knoten starten:

[ ]->

Wenn Sie etwas, das Sie speichern die Knoten füllen.

[X]->

Dann Sie am Ende der es einen neuen leeren Knoten erstellen.

[X]->[ ]

Und so weiter .. Und so weiter ..

[X]->[X]->

[X]->[X]->[ ]

In Ihrem Code, den Sie hinzufügen, um den Wert zu dem neuen Elemente. Wenn Sie an der Ende der Liste sind, ordnen Sie den Sitz dem aktuellen Knotenzu und dann erstellen Sie einen neuen (leeren) Knoten am Ende. Sie sollten auch eine Variable für den Knoten erstellen, ihm Speicher zuweisen und dann den Knoten darauf verweisen.

Für die verknüpfte Liste zu arbeiten, wo Sie

/* now we can add a new variable */ 
current->next = malloc(sizeof(node_t)); 
current->next->seat = a_seat; 
current->next->next = NULL; 

haben, sollten Sie haben

void AddSeat(node_t *head, seats a_seat){ 
    node_t *current = head; 
    node_t *new_node; 

    ... 

    new_node = malloc(sizeof(node_t)); 
    current->seat = a_seat; 
    current->next = new_node; 

    ... 

} 

Sehen Sie sich auch bitte einige gute Praktiken folgende wenn wie ataching den Zeiger Operator-Code in C zu schreiben (*) auf den Variablennamen (char *var statt char * var) und den Code richtig einrücken. Es verbessert die Lesbarkeit sehr.

Verwandte Themen