函数表示节点已删除但未删除

时间:2015-03-12 16:21:32

标签: c pointers singly-linked-list

所以我有这个函数deleteNode,删除一个节点,该节点在单个链表中的struct PersonalInfo中给出一个人的firstName。它返回1,意味着它删除了节点,但是当我打印链表时,它将名称留在内存中,好像什么也没发生。如果有人能帮我解决这个问题,我们将不胜感激。

int deleteNode(PersonalInfo **head, char *firstName){
  if(head!=NULL){
    PersonalInfo *currNode = *head;
    while(currNode!=NULL){
      if(strcmp(currNode->next->firstName, firstName)){ 
        PersonalInfo *nextNode = currNode->next->next;
        free(currNode->next);
        currNode->next = nextNode;
        return 1;
      }   
      if(currNode->next==NULL){
        printf("Operation was unsuccessful: No such name exists\n");
        return 0;
      }   
      currNode = currNode->next;
    }   
  }
  else{
    printf("Head is null, please enter a valid head\n");
    return 0;
  }
}

3 个答案:

答案 0 :(得分:2)

当两个字符串相等时,strcmp返回0.这是你应该使用的测试。

if(strcmp(currNode->next->firstName, firstName) == 0) 

答案 1 :(得分:1)

另一种可能性是取代:

if(strcmp(currNode->next->firstName, firstName))

with:

if(!strcmp(currNode->next->firstName, firstName))

由于str cmp的返回值仅在字符串相同时才表示“False”。

答案 2 :(得分:0)

首先观察你的strcmp。该块语句仅在字符串不相等时运行。你没有检查是否平等。我假设你只想在字符串相等时运行块语句。

返回值为

  1. > 0:str1> STR2
  2. < 0:str1< STR2
  3. = 0:str1 == str2

    if(strcmp(currNode-> next-> firstName,firstName)== 0)