0

並べ替えられたリンク リストがあり、ユーザーが nameToSearch に渡すものをすべて削除する関数を作成しようとしています。しかし、私はエラーが発生し続けます。以下は私がこれまでに持っているものです

void deleteProduct(NodePtr head, char* nameToSearch)
    {
        NodePtr nodeUnderEdit = findNodeByName(head, nameToSearch);
        if (nodeUnderEdit == NULL) 
        {
            cout<<"\n ERROR: Product not found \n";
        }
        else
        {

            delete nodeUnderEdit;
            nodeUnderEdit = nodeUnderEdit->next;

        }   

    }
4

3 に答える 3

6
  delete nodeUnderEdit;
  nodeUnderEdit = nodeUnderEdit->next;

nodeUnderEdit最初に削除するnodeUnderEdit->nextと、失われます。nodeUnderEdit の next の前のノードが接続されていることを最初に確認する必要がありますnodeUnderEdit->next。その後、削除を行うことができます。

于 2013-04-17T23:19:05.247 に答える
2

これは、単方向リストでは常に問題になります。

リンクされたリストから現在のノードを削除するには、直接アクセスできないのノードのポインターを変更する必要があるため、問題が発生します。

これを処理する 1 つの方法は、センチネル (リストの末尾として認識される値を含む最終ノード) を含むリストを使用することです。この場合、次のノードから現在のノードに値をコピーしてから、リストから次のノードを削除できます。

于 2013-04-17T23:21:08.577 に答える