2016-06-08 12 views
0

Hallo allerseits ich versuche eine Funktion zu erstellen, die eine bestimmte Nummer aus allen Zellen in der verknüpften Liste löschen, die diese Nummer haben, aber meine Löschfunktion löscht nur die erste Zelle er bis zum Ende kommen und dann zum Haupt Rückkehr dies ist mein Code:löschen Gewisse Nummer aus verketteten Liste (rekursiv)

struct num* deleteCell(struct num* point, int numdelete) 
{ 
    struct num* tempdelete = point; 
    if (point == NULL) // found the tail and dont found any match to delete 
    { 
     printf("not found\n"); 
     return NULL; 
    } 
    else if (point->number == numdelete)// found one to delete 
    { 
     tempdelete = point->pNext; 
     free(point); 
    } 
    else// Just keep going 
    { 
     point->pNext = deleteCell(point->pNext, numdelete); 
    } 
    return tempdelete; 
} 

(Punkt ist der Zeiger auf die erste Zelle, numdelete ist die Nummer, die ich löschen möchten) dank für Helfer !! !!

Alon

+1

sind verlinkte Listen für rekursive Algorithmen kein guter Behälter. Verwenden Sie besser einen iterativen Ansatz, um einen Stapelüberlauf zu vermeiden. – Olaf

+0

müssen Sie zu einem Element iterieren, das Sie löschen möchten. –

+0

@Olaf das ist meine Aufgabe Ich muss diesen Algorithmus auf rekursive Weise tun – alon

Antwort

0
struct num* deleteCell(struct num* point, int numdelete) { 
    if (point == NULL) { 
    return NULL; 
    } 

    if (point->number == numdelete) { 
    num* tempdelete = point->pNext; 
    free(point); 
    return deleteCell(tempdelete, numdelete); 
    } 

    point->pNext = deleteCell(point->pNext, numdelete); 
    return point; 
} 
+0

vielen Dank, ich bin wirklich dankbar für Ihre Hilfe – alon

+0

Wenn dies das ist, was Sie gesucht haben, können Sie die Antwort akzeptieren (klicken Sie auf das Häkchen?) –

+0

ja es ist ... done =) aber 1 kleines Ding warum yo hat point-> pNext = (zur Rekursion)? – alon