簡體   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