【发布时间】:2021-02-18 12:51:42
【问题描述】:
我正在尝试删除给定字符串的所有出现。此代码删除一个节点,但所有其他节点都保留。我试图将它包装在一个while循环中,但仍然没有效果。
我也想知道,是否可以删除 struct 参数并仍然让它发生。我试图删除它并修改了代码,但我得到一个分段错误。感谢您提前回答。
void deleteNode(struct node** head, char* searchName) {
struct node* current;
for(current=*head; current; current = current->next){
if (!strcmp(current->name, searchName))
{
if (current->next)
current->next->prev = current->next;
if (current->prev)
current->prev->next = current->prev;
if (current == *head)
*head = current->next;
current->prev = NULL;
current->next = NULL;
free(current);
return;
}
}
}
【问题讨论】:
-
你们有 Valgrind 吗?如果是这样,请使用它。你有代码来打印你的列表吗?如果是这样,您可以使用它在适当的阶段检查您的结果。
return是您最多只删除一个节点的原因。在释放内存之前对current->prev和current->next的分配是多余的(无害,但也没有必要)。
标签: c pointers linked-list doubly-linked-list function-definition