[英]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.