2016-06-30 6 views
0

Was ist das Problem in dieser Implementierung von "ein Element am Ende der einfachen verknüpften Liste einfügen", wenn der Kopf der Liste übergeben?Einfügen eines Elements am Ende einer verknüpften Liste?

void insert (int x, cel *ini) { 
    cel *tmp = ini; 
    while (tmp != NULL) 
     tmp = tmp->prox; 
    cel *new = malloc(sizeof(cel)); 
    new->value = x; 
    tmp->prox = new; 
    new->prox = NULL; 
} 
+1

Bitte geben Sie den Rest des Codes und was das Problem Sie haben bist ist. –

+4

Die while-Schleife wird wiederholt, bis tmp null ist. Anschließend versuchen Sie, einen Nullzeiger zu dereferenzieren. Sie müssen Schleife, bis tmp-> prox null ist. –

+0

Sie überprüfen nicht, dass der 'malloc()' erfolgreich ist - das ist ein Problem. Wie fügen Sie das erste Element zur Liste hinzu? –

Antwort

2

Dies sollte funktionieren:

void insert (int x, cel *ini) { 
    cel *tmp = ini;cel *left; 
    while (tmp != NULL) 
    { 
     left = temp; 
     tmp = tmp->prox; 
    } 
    cel *new =(cel*) malloc(sizeof(cel)); 
    new->value = x; 
    left->prox = new; 
    new->prox = NULL; 
} 

Du bist gerade bis tmp null ist, und Sie dann tmp->prox=new hinzufügen. Aber das Problem ist, dass aktuelle Temp ist NULL. Sie müssen auf einen neuen Knoten vom vorherigen Knoten von temp zeigen.

0

Ersetzen Sie einfach die Bedingung in der while-Schleife:

while(tmp->prox!=NULL) 

Es wird gut funktionieren, wie Sie den letzten Knoten der aktuellen Liste zu erreichen haben, die auf NULL verweist.

Sie müssen jedoch die folgende Bedingung hinzufügen, um zu überprüfen, ob ini NULL ist, dazu fügen Sie die folgende vor der Schleife hinzu.

if(ini==NULL) 
{ 
cel *new = malloc(sizeof(cel)); 
new->value = x; 
new->prox = NULL; 
ini=new; 
} 

Was Ihr Programm macht NULL erreicht (tmp Ihres Programms ist NULL)

+1

Was ist, wenn * ini null ist? – denis

+0

Nun, ja Sie müssen eine separate Bedingung dafür hinzufügen .. Ich habe die notwendigen Änderungen in der Antwort vorgenommen. –