gpt4 book ai didi

C - 链表 - 删除节点

转载 作者:太空宇宙 更新时间:2023-11-03 23:50:43 24 4
gpt4 key购买 nike

假设删除所有包含与字符串“name”相同的数据“last”的节点。它没有给我一个错误,但它不能正常工作。它删除的内容超过了它需要删除的内容。

struct node* mydelete(struct node *head) {
char name[21];
struct node *temp;

printf("---Please enter last name:");
scanf("%s", &name);
while (head->next != NULL) {
if (strcmp(head->last,name) == 0) {
temp = head;
head = head->next;
free(temp);
n--;
} else if (strcmp(head->next->last,name)==0) {
temp = head->next;
head->next = head->next->next;
free(temp);
n--;
} else
head = head->next;
}

return head;
}

最佳答案

return head

错了。当你向前移动头部(到“下一个”)时,它经过的任何东西都会丢失——你可能不会释放它们中的一些,但你不能再得到它们了。您应该使用临时指针保存列表中的第一个节点(删除后),并在最后返回它。

并且,不要忘记 head == NULL。

.

根据您的代码修改:

struct node *first = NULL;
while(head != NULL)
{
if(strcmp(head->last,name)==0)
{ //delete head
temp = head;
head = head->next;
free(temp);
n--;
}
else
{ //delete head->next

if (first == NULL)
first = head;

if (head->next == NULL)
break;

if(strcmp(head->next->last,name)==0)
{
temp = head->next;
head->next = head->next->next;
free(temp);
n--;
}
else
head = head->next;
}
}

return first;

关于C - 链表 - 删除节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20309326/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com