2016-06-01 16 views
0

Hallo Leute, ich habe eine Funktion erstellt, die aus einer verknüpften Liste rekursiv löscht, je nach der Nummer, die Sie aus der verknüpften Liste löschen möchten. aber nach dem Entfernen, wenn ich versuche, die Liste seinen Stapel zu drucken und es gibt einen Laufzeitfehler, weil nach dem Entfernen gibt es einfach nichts an der Stelle der Nummer. Wie kann ich den Code vervollständigen?rekursive Nummer aus verknüpfter Liste löschen

struct node* delete_item(struct node* head, int num) 
{ 
    if (head == NULL) { // Found the tail 
     printf("not found\n"); 
     return NULL; 
    } 
    else if (head->data == num) 
    { // Found one to delete 
     head = head->next; 
     free(head); 
     printf("num founded"); 
     return head->next; 
    } 
    else 
    { // Just keep going 
     head->next = delete_item(head->next, num); 
     return head; 
    } 
} 

Antwort

2

Sie befreit, was zurückgegeben werden sollte und dereferended der Zeiger auf was freigegeben wird. Das ist was falsch ist.

Sie sollten einen Puffer einführen, um zu speichern, was zurückgegeben werden soll.

struct node* delete_item(struct node* head, int num) 
{ 
    if (head == NULL) { // Found the tail 
     printf("not found\n"); 
     return NULL; 
    } 
    else if (head->data == num) 
    { // Found one to delete 
     struct node* next = head->next; 
     free(head); 
     printf("num founded"); 
     return next; 
    } 
    else 
    { // Just keep going 
     head->next = delete_item(head->next, num); 
     return head; 
    } 
} 
Verwandte Themen