gpt4 book ai didi

c - 当字符串匹配时删除链表中的节点

转载 作者:行者123 更新时间:2023-11-30 19:48:52 24 4
gpt4 key购买 nike

您好,我正在开发一个基于链表的结构项目,我请求你们提供一些帮助。当一个字符串是结构数据中的字符串的一部分时,我必须从链接列表中删除一个节点。

到目前为止我已经想出了这个。我能够使用strstr()查找两个字符串中的匹配项,但在显示字符串 #1 在字符串 #2 中后,整个程序失败了。

void zmaz(STUFF *p_akt, STUFF *p_prv, STUFF *p_vymaz){
char meno_autor[100];
scanf("%s", meno_autor);
while(p_akt!=NULL) {
if(strstr(p_akt->autori,meno_autor)!=NULL){
printf("string %s is in %s\n", meno_autor, p_akt->autori);

p_vymaz=p_akt;
if (p_prv == p_vymaz){ //deleting the first node
p_prv = p_prv->p_dalsi;
}

else {
p_akt = p_prv;
while (p_akt->p_dalsi != p_vymaz) p_akt = p_akt->p_dalsi;
p_akt->p_dalsi = p_vymaz->p_dalsi;
}
free((void*)p_vymaz);
}
p_akt=p_akt->p_dalsi;
}
}

我不必只删除一个节点,还可以移动下一个节点,这样它们之间就没有间隙。我试图尽可能地解释一切。谢谢!

最佳答案

失败的原因是您编写了以下代码序列:

while(){
if(){
...
p_vymaz=p_akt;
...
free((void*)p_vymaz);
}
p_akt=p_akt->p_dalsi;
}

您已通过将 p_vymaz 分配给 p_akt 然后释放 p_vymaz 来释放 p_akt。因此,p_akt->p_dalsi 不再有效。

关于c - 当字符串匹配时删除链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16390406/

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