2016-04-20 22 views
1

ich Probleme, bin durch die Eingabe der Telefonnummer des Datensatzes einen Knoten aus einer verknüpften Liste zu löschen ... Dies ist der Code, soll dies tun:Löschen eines Knotens aus einer verknüpften Liste

typedef struct record 
{ 
    char name[20]; 
    char surname[20]; 
    char telephone[20]; 
}Record; 

typedef struct node 
{ 
    Record data; 
    struct node *next; 
}Node; 

Node *head = NULL; 

void delete() { 
    Node *n = head; 
    Node* previous = NULL; 
    Node *next = n; 

    int length; 
    int valid; 
    char telNumber[20]; 
    char confirm = 1; 

    do { 
    valid = 0; 
    printf(" TELEPHONE NO. (8 digits) : "); 
    gets(); 
    gets(telNumber); 
    length = strlen(telNumber); 
    for (int i = 0; i < length; i++) 
    { 
     if (!isdigit(telNumber[i]) || (length != 8)) 
     { 
      printf("You enterred an invalid number\n"); 
      valid = 1; break; 
     } 
    } 

} while (valid == 1); 

while (n != NULL) { 
      if (strcmp(&n->data.telephone, telNumber) == 0) { 
       if (previous == NULL) { 
        n = n->next; 
        free(head); 
       } 
       else { 
        previous->next = n->next; 
        free(n); 
        n = previous->next; 
       } 
      } 
      else { 
       previous = n; 
       n = n->next; 
      } 
     } 
     printf("You have successfully deleted the telephone record"); 

. . . Der Datensatz bleibt immer noch dort. Auch wenn ich zwei Datensätze habe, wenn ich versuche, den ersten Datensatz zu löschen, findet das Programm ihn nicht

+1

Ein [MCVE] (http://stackoverflow.com/help/mcve) könnte hier helfen. –

+0

Ja, wo ist der Rest des Codes, oder wenn Sie eine gekürzte Version veröffentlichen werden, stellen Sie zumindest sicher, dass es kompilierbar ist und das Problem aufweist. –

Antwort

2

Sie bewegen den Kopf nicht vorwärts, wenn der erste Knoten gelöscht wird.

while (n != NULL) { 
     if (strcmp(&n->data.telephone, telNumber) == 0) { 
      if (previous == NULL) { 
        n = n->next; 
        free(head); 
        head = n; /* missing*/ 
      } 
      ... 
2

Nun, es gibt keinen Fehler im Lösch-Teil. Vielleicht ist der Kopf nicht initialisiert und übergibt den Nullwert an 'n'. Also, da 'n' Nullwert hat, ist das Löschen nicht möglich. Oder der aktualisierte Wert von n wird nicht korrekt zurückgegeben oder an die Hauptfunktion übergeben.

Verwandte Themen