1

リストに要素を追加するための挿入関数を再帰的に作成しています。問題は、プログラムを実行して挿入しようとすると、一度だけ挿入され、2 回目に壊れてバグが発生することです。任意の提案、ありがとう

ヘルパー関数:

 void List::insertHelper(Node* list, int number)
        {
            if(list->next != NULL)
            {
                insertHelper(list->next, number);
            }
            else
            {
                list->next = new Node;
                list->next->data = number;
            }

        }

再帰的なものを呼び出すときのこの関数:

void List::insert( int d)
    { 
        if( head == NULL)
        {
            head = new Node;
            head->data = d;
        }
        else
        {
        insertHelper(head, d);
        }   

    }
4

3 に答える 3

1

あなたの問題は、次の欠如です:

list->next->next = NULL;

insertHelper の else 部分で。「提案」の部分に関しては、できればリストを再帰的に処理することは避けてください。あなたの(将来の)同僚はそれを高く評価しません。

于 2013-05-19T07:04:36.903 に答える
1
void List::insertHelper(Node* list, int number)
        {
            if(list->next != NULL)
            {
                insertHelper(list->next, number);
            }
            else
            {
                list->next = new Node;
                list->next->data = number;
                list->next->next=NULL; // You are missing this line.... becuase of this.. new nodes next remains as dangling pointer instead of null.. 
            }

        }
于 2013-05-19T07:05:25.150 に答える
1

新しいノードを挿入するたびに、その新しいノードの次の値を NULL に設定する必要があります。そうしないと、insertHelper は、呼び出すたびにジャンク ポインター値を取得します。

これが変更されたコードです。

void List::insertHelper(Node* list, int number)
    {
        if(list->next != NULL)
        {
            insertHelper(list->next, number);
        }
        else
        {
            list->next = new Node;
            list->next->data = number;
            list->next->next = NULL; //MODIFIED LINE
        }

    }

void List::insert( int d)
    { 
        if( head == NULL)
        {
            head = new Node;
            head->data = d;
            head->next = NULL; //MODIFIED LINE
        }
        else
        {
            insertHelper(head, d);
        }   

    }

これでうまくいくはずです。

于 2013-05-19T07:23:41.827 に答える