2016-09-08 7 views
1

ノードの検索結果を出力しようとしています。だから私は新しい二重リンクリストを作成し、それらの新しいノードを追加しようとしています。 しかし、正しい結果しか得られない場合、2番目の結果はアドレスまたはそのノードを推測するか、エラーです。画像に示されているように。リンクされたリスト内で複数のノードを検索して挿入する方法

enter image description here

私のコード:

Order::Node* Order::searchByDate(string date) { 
    Node* cur = head; 
    Node* node = NULL; 
    cout << "\nSearching " << endl; 
    Sleep(400); 

    while (cur != NULL) { 
     if (cur->date == date) { 
      //create new node 
      Node* newNode = new Node; 
      newNode->prev = NULL; 
      newNode->next = cur; 
      //copy newNode to node(new linked list having all search result) 
      node = newNode; 
      node->prev = newNode; 
      node = newNode; 
      Sleep(400); 
     } 

     cur = cur->next; 
    } 
    return node; 
} 

表示機能:

Node* cur = searchByDate(date); 
while (cur != NULL) { 
    cout << cur->orderid << "\t\t" << cur->date << "\t" << cur->cust.custId << endl; 
    cur = cur->next; 
} 

私は1つのリンクリストにすべての検索ノードを追加することができます任意のソリューション。

+0

なぜスリープ(400)を試してみてください? – robor78

答えて

4

新しいノードの

  • 以前は、既存の検索結果はず。
  • 次はnullにする必要があります。既存の検索のために

は、次の新しいノードを指している必要があります

  • 結果。

検索結果の先頭に別のポインタを置いてください。この開始ノードをメソッドの結果として返します。

この

Order::Node* Order::searchByDate(string date) { 
    Node* cur = head; 
    Node* node = NULL; 
    Node* start = NULL; 

    while (cur != NULL) { 
     if (cur->date == date) { 

      //make a new node 
      Node* newNode = new Node(cur->date); 
      newNode->prev = NULL; //explicitly set to NULL 
      newNode->next = NULL; //explicitly set to NULL 

      if (node == NULL) { 
       //very first node 
       node = newNode; 
       start = node; 
      } 
      else { 
       //append new node to existing nodes 
       //see diagram below 
       node->next = newNode; 
       newNode->prev = node; 
       node = newNode; 
      } 
     } 

     cur = cur->next; 
    } 
    return start; 
} 

append new node

+0

どのように素敵なダイアグラムを作っていますか? –

+0

はいこれが動作します。私は少し変更しました。つまり、 'Node * newNode = new Node; \t \t \t newNode-> prev = NULL; // NULLに明示的に設定します。 \t \t \t newNode-> next = NULL; //明示的にNULLに設定する \t \t \t newNode = cur; 'ありがとう – Nix

+1

@ V-R Visioまたはopenofficeの描画ユーティリティが候補者です。 – user4581301

関連する問題