Ich versuche, mit verknüpften Listen bis 20 zu zählen. Ich habe den Code geschrieben, mit 2 Funktionen. Eine Funktion, die den Knoten zur verknüpften Liste hinzufügt und eine, die das Ganze ausgibt. aber es ist in einer Endlosschleife und ich habe keine Ahnung warum.Verknüpfte Liste zählt zu 20
Ich habe versucht, mehrere Male zu debuggen und ich glaube, es ist die Funktion hinzufügen, möglicherweise die printlist, während nie auf null und damit seine endlose Drucken wird? Ich denke, die Add-Funktion implementiert die Knoten nicht korrekt, aber ich bin mir nicht sicher, wie ich das beheben soll.
Das ist mein struct:
struct node
{
int number;
struct node *next;
};
typedef struct node NODE;
Dies ist hauptsächlich, die Calles die Funktion hinzufügen, und übergibt sie i (0-20) zusammen mit der Liste.
Funktion hinzufügen, die temp als übergebene Daten übernimmt und iter durch die verkettete Liste bis zum Ende iterieren. Als ich mitnehmen, die (& & ITER> Weiter-> Nummer < Nummer) in der while-Schleife druckt es nichts aus, aber mit ihm, es die unendliche Schleife hat
struct node* add(struct node *first, int number){
struct node* temp;
struct node* iter;
temp= malloc(sizeof(struct node));
temp->number=number;
temp->next=NULL;
if(first==NULL)
return temp;
iter=first;
while(iter->next!=NULL && iter->next->number < number){
iter=iter->next;}
temp->next=iter->next;
iter->next=temp;
return first;
}
Dies ist die drucke Funktion, die ich Ich glaube, das Problem liegt in der Funktion Knoten hinzufügen.
struct node* printList(struct node *mylist){
struct node *helpptr;
helpptr = mylist;
while (helpptr != NULL){
printf("%d", helpptr->number);
helpptr = helpptr->next;
}
return 0;
}
Vielen Dank für Ihre Hilfe im Voraus
ändern Sie den Zustand Ihrer Druckschleife von 'helpptr-> next! = NULL' zu' helpptr! = NULL'. Andernfalls wird die Nummer des letzten Eintrags in der Liste nicht ausgedruckt. Da Funktionsparameter als Wert und nicht als Verweis aufgerufen werden, können Sie mit 'myList' arbeiten, anstatt eine neue Zeigervariable zu erstellen. – jboockmann
Ok, danke!Ich werde das beheben, sobald ich es mehr als nur Drucken 0 – Kris
Sie können NULL zu einem int in Ihrer Hauptfunktion zuweisen. Dies wird eine Kompilierungswarnung ergeben! Siehe unten meine Antwort für eine Lösung ;-) – jboockmann