1

そこで、並べ替えられたリンク リストを挿入、削除、および表示するプログラムを作成しました。すべてがスムーズに実行されますが、無効な番号 (並べ替えられたリンク リストにない) を削除のために入力すると、プログラムがクラッシュします。これが私の削除機能です:-

struct node* remove(struct node* head_ptr, int target)
{
    struct node* help_ptr, *node2del;
    help_ptr = head_ptr;
    if(help_ptr != NULL)
    {
        if(help_ptr -> data == target)
        {
            head_ptr = help_ptr -> next;
            free(help_ptr);
            return head_ptr;
        }
        while (help_ptr -> next != NULL)
        {
            if(help_ptr -> next -> data == target)
            {
                node2del = help_ptr -> next;
                help_ptr -> next = help_ptr -> next -> next;
                free(node2del);
                return head_ptr;
            }
            help_ptr = help_ptr -> next;
        }
        if(help_ptr->next->data != target)
            printf("\n%d is not in the list.",target);
    }
    return head_ptr;
}

完全なプログラムについては、ここをクリックしてください。前もって感謝します!

4

2 に答える 2

3

ループはiswhileまで実行されます。ループの直後に比較しますが、そのままではクラッシュします。help_ptr->nextNULLhelp_ptr->next->datahelp_ptr->nextNULL

最後ifは本質的に不要です。ループ中にアイテムが見つからない場合、そのアイテムはwhileリストにありません。

于 2013-08-17T04:16:13.133 に答える