繁体   English   中英

删除单链表C中字符串中子串的出现次数

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM