2016-04-20 38 views
1

我在通過輸入記錄的電話號碼從鏈接列表中刪除節點時遇到了問題。這是應該這樣做的代碼:找到它後從鏈表中刪除一個節點

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; 

。 。 。 (這裏我寫的代碼進入存儲在telNumber數([20]),查找包含

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"); 

記錄仍然存在數量記錄

回答

0

此:

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

是不是如何比較字符串在C中的相等性。這將比較地址,這將永遠不會匹配。

它應該是:

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

這確實解決了部分問題,謝謝。但是,在顯示記錄時,記錄仍然存在。也許我需要回報一些東西? – Simon