1

リンクリストを介して番号のリストを並べ替えることを目的とした、かなり基本的なプログラムがあります。

私がハングアップしているのは、要素をリストの先頭に挿入する必要があるときです。これが問題のコードのチャンクです

root-> x = 15であり、プロンプトが表示されたときにユーザーが12を入力すると仮定します。

void addNode(node *root)
{
int check = 0;  //To break the loop
node *current = root;   //Starts at the head of the linked list
node *temp = new node;


cout << "Enter a value for x" << endl;
cin >> temp->x;
cin.ignore(100,'\n');


if(temp->x < root->x)
{
    cout << "first" << endl;
    temp->next=root;
    root=temp;

        cout << root->x << " " << root->next->x; //Displays 12 15, the correct response
}

しかし、この関数を実行した後、私が試してみると

cout << root->x;

main()に戻ると、15が再び表示されます。したがって、コード

root=temp;

関数を離れると失われます。現在、LLに別の要素を追加し、その隣にroot->を指すなど、*rootに対する他の変更が引き継がれています。

提案?

4

1 に答える 1

2

これは、ローカルnode *root変数を設定しているため、元のルートを変更するのではなく、スタックに渡されるパラメーターのみを変更するためです。

これを修正するには、ポインタへの参照を使用する必要があります。例:

void addNode(node*& root)

またはポインタへのポインタ:

void addNode(node **root)
于 2012-04-22T22:25:45.287 に答える