2017-07-27 6 views
-2

二重リンクリストにノードの後に​​整数を挿入する関数があります。それはうまくコンパイルされます。しかし、2 4 6 8で作成されたDLLという二重リンクリストを使用してテストケースを実行し、4の後に5を挿入する関数を呼び出そうとすると、リンクされたリストに何も起こりません。私は理由を知らない。ノードを二重リンクリストに挿入する

void DoublyLinkedList::insertAfter(const DListNode &p, int newobj) {  
    DListNode *newNode = new DListNode(newobj); 
    DListNode *node = header.next; 
    while(node != &p) { 
    node = node->next; 
    } 
    node = node->next; 
    node->next->prev = newNode; 
} 
+3

「何も起こりません」とは何ですか?期待される動作のテストケースをいくつか考え出し、ロジックがそれに対して働いていることを確認する必要があります。 – Nim

答えて

0

関連するすべてのDListNodeで2つのポインタ(次と前)を更新する必要があります。

void DoublyLinkedList::insertAfter(const DListNode &p, int newobj) {  
    DListNode *newNode = new DListNode(newobj); 
    DListNode *node = header.next; 
    while(node != &p) { 
     node = node->next; 
    } 
    newNode->next = node->next; 
    newNode->prev = node; 
    // test to know if the insertion is in the middle or in the end. 
    if (node->next != NULL) // insert in the middle. 
     node->next->prev = newNode; 
    else // insert in the end. 
     lastNode = newNode; 
    node->next = newNode; 
} 

詳細については、https://en.wikipedia.org/wiki/Doubly_linked_list#Inserting_a_nodeを参照してください。

2
2---> 4---> 6--->8 
^ |^ |^ | 
|____||____||____| 

あなたは、あなたの関数が終了した後、

2---> 4---> 6--->8 
^ |  |^ | 
|____|  ||____| 
      | 
    NULL<---5---->NULL 

あなたのリストが壊れているnewnode

NULL 5--->NULL 
^ | 
    |______| 

//Don't know how you are populating a newnodes next and prev but they should be NULL. 

を割り当てます。 ストラクチャを損なわないように関連するすべてのポインタを更新する必要があります。

while() 
{.. 
} 
newNode->next = node->next; 
newNode->prev = node; 
node->next=newNode; 
if(newNode->next!=NULL) 
    newNode->next->prev=newNode; 
関連する問題