2016-04-23 5 views
0

二重リンクリストのコピーコンストラクタの実装に問題があります。私は、下のforループにtailとpreviousポインタを設定しますか?単独リンクリストに対して次の作品:doubleLinkedListコピーコンストラクタ

sortedList::sortedList(const sortedList& original) 
: size(original.size) 
{ 
if (original.head == NULL) 
    head = NULL; // original list is empty 

else 
{ 
    // copy first node 
    head = new listNode; 
    tail = new listNode; 
    assert(head != NULL); // check allocation 
    assert(tail != NULL); // check allocation 
    head->item = original.head->item; 
    tail->item = original.tail->item; 
    // copy rest of list 
    listNode *newPtr = head; // new list pointer 


    // newPtr points to last node in new list 
    // origPtr points to nodes in original list 
    for (listNode *origPtr = original.head->next; origPtr != NULL; origPtr = origPtr->next) 
    { 
     newPtr->next = new listNode; 
     assert(newPtr->next != NULL); 

     newPtr = newPtr->next; 

     newPtr->item = origPtr->item; 
     /* 
     newPtr = new listNode; 
     newPtr->item = origPtr->item; 
     newPtr->prev = origPtr->prev; 
     tail->next = origPtr; 
     tail = origPtr;*/ 
    } 

    newPtr->next = NULL; 
} 

} 
+0

は答えを追加しました。それが動作するかどうか試してみてください。 – trans1st0r

答えて

0

あなたがループ内で、コピーのすべての要素のための前のポインタを設定する必要があります。完了したら、head->prevtail->nextを更新してください。

これは役立つかもしれない:

for (listNode *origPtr = original.head->next; origPtr != original.head; origPtr = origPtr->next) 
    { 
     newPtr->next = new listNode; 
     assert(newPtr->next != NULL); 

     listNode * prev = newPtr; 
     newPtr = newPtr->next; 

     newPtr->item = origPtr->item; 
     newPtr->prev = prev; 
    } 

    tail->next = head; 
    head->prev = tail;