[英]Deleting occurrences of substring in string in singly linked list C
我这里有一点问题。
我必须编写一个单链表的东西,从现在开始我没有遇到任何问题。 我坚持删除链接列表中的作者名称中的函数调用后给出的子字符串。
程序片段:
void list_delete_element(kniha_t* inode)
{
kniha_t *actualnode = inode;
kniha_t *prevnode = NULL;
kniha_t *tempnode = NULL;
uchar_t needle[100];
uchar_t haystack[100];
ushort_t occur = 0;
scanf("%s", &needle);
lower_string(needle);
while(actualnode != NULL)
{
copy_string(haystack, actualnode->autori);
lower_string(haystack);
if(search_string(haystack, needle))
{
occur++;
if ( NULL != prevnode)
{
prevnode->next = actualnode->next;
}
else
{
inode = actualnode->next;
}
tempnode = actualnode;
actualnode = actualnode->next;
free(tempnode);
tempnode = NULL;
}
else
{
prevnode = actualnode;
actualnode = actualnode->next;
}
}
printf("Deleted sa %hu nodes\n", occur);
}
我必须加载它的东西,忽略---:
http://pastebin.com/NPvEr3y6
问题是,这是有效的(:D)......直到我清除所有事件。
例:
当我键入pra时,它必须删除包含“pra”的所有节点。 它就像一个魅力......但是当我只键入“p”时,它告诉我,所有X次出现都被释放了,但是它们留在缓冲区的某个地方,因为我可以再打印出整个列表!
我将非常感激,谁能给我一些建议。
这个说法:
tempnode = NULL;
事实上,除了任务和立即释放之外你永远不会对tempnode
做任何事情。
您的list_delete_element
应该采用kniha_t**
以便您可以删除头节点和剪枝链表。 使用当前代码,您删除节点,但其他功能不知道,因为inode
未更改。
您可以将代码更新为
void list_delete_element(kniha_t* *inode)
{
kniha_t *actualnode = *inode;
...
if ( NULL != prevnode)
{
prevnode->next = actualnode->next;
}
else
{
*inode = actualnode->next;
}
...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.