2017-01-26 2 views
-1

Im C-Code unten erstellen ich eine verknüpfte Liste und eine Funktion, die die int Werte der Mitglieder druckt. Ich habe einige Beispiel-Mitglieder in der main erstellt, aber nichts wird gedruckt und ich kann nicht herausfinden, warum.Warum kann ich Werte von verknüpften Listenelementen nicht drucken?

#include <stdio.h> 
#include <stdlib.h> 

typedef struct node * ptr; 
typedef struct node { 
    int data; 
    ptr next; 
} item; 

void printList(ptr p); 

int main() { 
    item h1 = {12, NULL}; 
    item h2 = {13, h1.next}; 
    item h3 = {14, h2.next}; 
    printList(h3.next); 
} 

void printList(ptr p) { 
    while(p) { 
    printf("%d -> \n", ptr -> data); 
    ptr = ptr -> next; 
    } 
} 
+1

Sie haben alle 'nächsten' Mitglieder zu' NULL' ..... also ..... – LPs

+0

aber warum? Ich habe 'h1' nur auf' NULL' initialisiert, während 'h3' auf nicht-NULL' h2' zeigt. – Yos

+2

'item h3 = {14, h2.next};' ---> 'item h3 = {14, &h2};' – LPs

Antwort

2

Ihre Initialisierung ist falsch.

item h2 = {13, h1.next}; 

Initialize h2next Elementzeiger zum Inhalt des next Mitglied h1, ist, dass NULL, und das gleiche für h3.

#include <stdio.h> 

typedef struct node { 
    int data; 
    struct node *next; 
} item; 

void printList(item *p); 

int main(void) { 
    item h1 = {12, NULL}; 
    item h2 = {13, &h1}; 
    item h3 = {14, &h2}; 
    printList(&h3); 
} 

void printList(item *p) { 
    while(p) { 
    printf("%d -> \n", p->data); 
    p = p->next; 
    } 
} 

Ausgabe

14 -> 
13 -> 
12 -> 

Randbemerkung: Vermeiden Sie zu verbergen Zeiger mit typedef, machen den Code schwer zu verstehen, wenn der Code viel mit vielen Schichten wächst.

1

diesen Code zu ändern

item h1 = {12, NULL}; 
item h2 = {13, h1.next}; 
item h3 = {14, h2.next}; 

der folgenden Ihr Problem

item h1 = {12, NULL}; 
item h2 = {13, &h1}; 
item h3 = {14, &h2}; 
1

h3.next zu h2.next initialisiert wird, lösen, die zu h1.next initialisiert wird, die auf NULL initialisiert wird, so alle von ihnen sind NULL.
Offensichtlich gibt es bei NULL nichts zu drucken.

Möglicherweise müssen Sie Ihre Initialisierungskette anders herum aufbauen.

Verwandte Themen