0

双方向リンク リストを作成するためのスターター コードが提供されています。私が抱えている問題は、新しく作成されたノードを「先頭」に挿入する関数を実装することです。

リンク リスト内のノードは、次の構造体です。

template <class T>
struct ListItem
{
    T value;
    ListItem<T> *next;
    ListItem<T> *prev;

    ListItem(T theVal)
    {
        this->value = theVal;
        this->next = NULL;
        this->prev = NULL;
    }
};

先頭に挿入するコードは次のとおりです。

void List<T>::insertAtHead(T item)
{
     ListItem<int> a(item);     //create a node with the specified value

                   if(head==NULL)
                   {
                                 head=&a;   //When the list is empty, set the head
                                            //to the address of the node
                   }

                   else
                   {

                         //when the list is not empty, do the following.
                        head->prev=&a;
                        a.next=head;
                        head=&a;
                   }
}

問題は、項目を挿入するたびに異なるメモリ アドレスを持つ新しいクラス オブジェクトを作成することになっている場合です。上記で行っていることは、同じメモリの場所を更新します。新しいクラス オブジェクトを作成する方法を知る必要があります。

4

1 に答える 1

0

あなたがしていることは間違っており、潜在的に危険です(ローカル変数へのポインタを使用しています)。new次の式で新しいノードを割り当てる必要があります。

ListItem<int>* a = new ListItem<int>(item);

もちろん、リストを使い終わったら、 でメモリを解放することを忘れないでくださいdelete

于 2013-02-07T11:04:05.373 に答える