所以我有这个函数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;
}
}
答案 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。该块语句仅在字符串不相等时运行。你没有检查是否平等。我假设你只想在字符串相等时运行块语句。
返回值为
= 0:str1 == str2
if(strcmp(currNode-> next-> firstName,firstName)== 0)