2016-10-02 4 views
0

私は、この構造体を使用しています:リンクされたリストのスタックのコピーコンストラクタC++

struct node 
{ 
    T data; 
    node *next; 
}; 

node *head; 
node *headCopy; 

をスタックの実装に基づいて、単一のlinked listを作成します。私のコアスタックメソッドはすべて動作しています。私はトラブルの引数を取りコピーコンストラクタを実装が生じています:

LinkedStack<T>::LinkedStack(const LinkedStack<T>& aStack) 

私が現在持っていることは、これは(動作していないもの)である:私の最大の問題がある

node *temp; 
temp = head; 
while (temp != NULL) 
{ 
    headCopy = head; 
    temp = temp->next; 
} 

私はと仮定しますこのコピーがどのように起こるかを視覚化するのに問題があります。私は他の例を見てきましたが、私はそれに従うことができません。配列ベースのスタックのコピーコンストラクタを作成するのに問題はありませんでした。私はshow()の機能に似ていると想像しましたが、出力する代わりに別のリンク先に再割り当てしています。次のように私のshow()方法は次のとおりです。

node *temp; 
temp = head; 
while (temp != NULL) 
{ 
    std::cout << temp->data << std::endl; 
    temp = temp->next; 
} 

任意の助けをいただければ幸いです、ありがとうございました!

+1

ヒント:while(temp!= NULL){addToEndOfList(temp-> data);} temp = temp-> next;} ' – immibis

+0

[3のルールとは何か]の重複の可能性あり(http://stackoverflow.com/questions/4172722/what-is-the-rule-of-three) –

答えて

1

オリジナルの各ノードについて、コピーに新しいノードを割り当てる必要があります。あなたの質問には、正確なコードを記入するのに十分な詳細は含まれていません。あなたは、おおよそ以下の操作があるでしょう:

  1. あなたはすなわち、元のデータを割り当てる必要があります

    node* n = new node(); 
    
  2. のようになります。新しいオブジェクト、

    のようなものを割り当て
    n->data = temp->data; 
    

    (ごnodeあなたがnew node(temp->data)を使用して、それを割り当てることができ、その場合には、引数としてデータを取るコンストラクタを持っていない限り)。

  3. 正しいノードに新しいノードnを追加する必要があります。

あなたのスタッククラスが最後に新しい要素をプッシュする方法を持っている場合、あなたはそれを使用することができる場合がありますループの中で、元の真上にあなたが実行したい代わりに新しいnode Sを作成すると、追加します要素を新しいリストの最後に追加します。

コピーコンストラクタを定義するときは、コピーアサインも定義してください。最も簡単な方法は、コピーコンストラクタを使用して実際のコピーを作成し、次に一時オブジェクトの内容を割り当てられたオブジェクトと入れ替えることです。

関連する問題