函数表示节点已删除但未删除
Function says node is deleted but is not deleted
所以我有这个函数 deleteNode,它在单向链表中的 struct PersonalInfo 中删除给定一个人的 firstName 的节点。它 returns 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;
}
}
当两个字符串相等时 strcmp returns 0。这是你应该使用的测试。
if(strcmp(currNode->next->firstName, firstName) == 0)
首先观察的是你的 strcmp。该块语句仅在字符串不相等时才会 运行 。你不是在检查平等。我假设您只想 运行 仅当字符串相等时才使用块语句。
return 值为
- > 0: str1 > str2
- < 0: str1 < str2
= 0: str1 == str2
if(strcmp(currNode->next->firstName, firstName) == 0)
另一种可能是替换:
if(strcmp(currNode->next->firstName, firstName))
与 :
if(!strcmp(currNode->next->firstName, firstName))
因为 strcmp 的 return 值仅当字符串相同时才表示 "Flase"。
所以我有这个函数 deleteNode,它在单向链表中的 struct PersonalInfo 中删除给定一个人的 firstName 的节点。它 returns 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;
}
}
当两个字符串相等时 strcmp returns 0。这是你应该使用的测试。
if(strcmp(currNode->next->firstName, firstName) == 0)
首先观察的是你的 strcmp。该块语句仅在字符串不相等时才会 运行 。你不是在检查平等。我假设您只想 运行 仅当字符串相等时才使用块语句。
return 值为
- > 0: str1 > str2
- < 0: str1 < str2
= 0: str1 == str2
if(strcmp(currNode->next->firstName, firstName) == 0)
另一种可能是替换:
if(strcmp(currNode->next->firstName, firstName))
与 :
if(!strcmp(currNode->next->firstName, firstName))
因为 strcmp 的 return 值仅当字符串相同时才表示 "Flase"。