2016-08-10 6 views
0

C++でリンクリストを学習しようとしていますが、リンクリストは2つの要素しか追加していないため、問題に直面しています。LinkedListはC++で2つの要素しか追加しません

コード:出力で

struct Node { 
int data1; 
Node* next; 
}; 

void firstElement(Node *&head, int d) 
{ 
Node* temp = new Node; 
temp->data1 = d; 
temp->next = NULL; 
head = temp; 
} 

void insert(Node *&node, int data) 
{ 
Node* temp = new Node; 
temp->data1 = data; 
temp->next = NULL; 


while(node) 
{ 
    if(node->next == NULL) 
    { 
     node->next = temp; 
     return; 
    } 
    node = node->next; 
} 

} 

void display(Node *&node) 
{ 
while(node != NULL) 
{ 
    cout << node->data1 << endl; 
    node = node->next; 
} 
} 

int main() 
{ 
Node* head; 

firstElement(head, 1); 
insert(head, 2); 
insert(head, 3); 
insert(head, 4); 
insert(head, 5); 
insert(head, 6); 
insert(head, 7); 
insert(head, 8); 
insert(head, 9); 
insert(head, 10); 

display(head); 

} 

は、それだけで私は9 and 10すなわち、最後の2つの要素を評価できます。それはちょうど値を置き換えているように見えます。しかし、私はそれを得ていない。私のtempノードについては、すでにそれを次のノードに初期化しています。つまり、temp->next = NULLです。 そして、関数では、if conditionを使用して、NULLの場合にのみ次のノードを追加します。

提案がありますか?

+3

デバッガと線でyoutはコード行をステップ実行するとき、あなたは何を観察しましたか? –

+1

私は何年もC++を使用していませんが、この場合は "*&"は本当に正しいですか? –

+1

@StefanAgartssonそれはちょうどポインタへの参照を取るだけです。 – Garf365

答えて

3

問題はinsertの機能から発生します。それはそうとすぐにループで

node = node->next; 

がそうであるようにNode* &を取る、それはノードのパラメータリストとして、発信者が使用する変数を変更します。 &を外し し、あなたの問題が解決されています

void insert(Node* node, int data) 
+0

追加の明確さのために、「元のリスト」を「ノードパラメータとして呼び出し元によって使用される変数」に変更することを推奨します。 – user4581301

+0

出来た。 '*&'を追加すると、パラメータ化されたノードを新しいノードに渡してから、その新しいノードにtempを追加する必要がありました。例えば、Node * n = node; while(n)...... n-> next = temp; .... n = n> next; ' あなたが言ったように私は理解できませんでした、それは元のリストを変更します。それがオリジナルを置き換えていたら、それは私に10を示すだけではいけませんか?なぜ「9と10」? – nix

+0

あなたの提案をありがとう、それは編集されました;) – Omar

関連する問題