2016-04-20 7 views
1

Ich habe Probleme beim Löschen eines Knotens aus einer verknüpften Liste durch Eingabe der Telefonnummer des Datensatzes. Dies ist der Code, der dies tun soll:Löschen eines Knotens aus einer verknüpften Liste, nachdem er gefunden wurde

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; 

. . . (Hier schrieb ich den Code die Nummer (gespeichert in Telnummer [20]) und finden Sie den Eintrag mit der Nummer

while (n != NULL) { 
      if (&n->data.telephone == telNumber) { 
       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 Rekord noch bleibt eingeben

Antwort

0

Dies.

if (&n->data.telephone == telNumber) 
.

ist nicht, wie Strings in C für Gleichheit zu vergleichen, die die Adressen vergleicht, die nie übereinstimmen

es sein sollte:

if (strcmp(n->data.telephone, telNumber) == 0) 
+0

Das hat einen Teil des Problems gelöst, danke. Beim Anzeigen der Datensätze ist der Datensatz jedoch immer noch vorhanden. Vielleicht muss ich etwas zurückgeben? – Simon