2016-10-09 5 views
3

リンクリストクラスの単純なコピーコンストラクタを作成しようとしています。私のクラスはシンプルで、最初のノードを指し示す変数Firstと、最後のノードを指す変数Lastがあります。C++単純なリンクリストのコピーコンストラクタを作成する

これは単一リンクであるため、各ノードは次のノードを指し示すため、前のノードはありません。コピーコンストラクタを作成しようとしましたが、最後のノードが同じアドレスを指しているように見えます。コピーしたリストに何かを追加すると、元のノードにも表示されます。

相続人は、私がこれまで持っているもの:

queue::queue(const queue &v){ 
    first = v.first; 
    last = v.last; 


    first-> value = v.first->value; 

    node *curr = first; 
    node *otherCur = v.first; 
    while(otherCur->next != NULL){ 
     cout << "------Next is: " << otherCur->next->value << endl; 
     curr ->next = otherCur->next; 
     curr->next->value = otherCur->next->value; 
     curr = curr->next; 
     otherCur = otherCur->next; 

    } 
    curr->next = NULL; 


} 
+2

2番目のオブジェクトのすべてのノードは、1番目のオブジェクトの同じノードを指します。 2番目のリストのノードにメモリを割り当て、最初のリストのノードから値をコピーするだけです。 –

+0

言い換えると、ポインティング先のデータをコピーするときにポインタをコピーしています – qxz

答えて

0

あなたはあなたのコード内の任意のnode配分を行っていません。実際には、それぞれnodeは1つだけqueueに属している必要があります。したがって、vをコピーすることによって、にあるように多くのnodeを割り当てる必要があります。

次のコードでは、デストラクタqueueは作成されたすべてのノードを削除する必要があることに注意してください。

queue::queue(const queue &v) : first(NULL), last(NULL) { 
    if (v.first) { 
     first = new node(*v.first); 
     first->next = NULL; 
     last = first; 
     // first-> value = v.first->value; // copy constructor should have done that 

     node *curr = first; 
     node *otherCur = v.first; 
     while(otherCur->next != NULL){ 
      cout << "------Next is: " << otherCur->next->value << endl; 
      curr->next = new node(*otherCur->next); 
      curr->next->next = NULL; 
      last = curr->next; 
      // curr->next->value = otherCur->next->value; 
      curr = curr->next; 
      otherCur = otherCur->next; 
     } 
     // curr->next = NULL; 
    } 
} 
関連する問題