2016-04-20 18 views
1

私は、単一リンクリストの最後にノードを追加しようとしていますが、最初の要素だけが追加されています。何が間違っているの?リンクされたリストadd at end not working

void addAtEnd(int key){ 
Node * head = Node; 
if(head == NULL){ 
    head = new Node; 
    head->key = key; 
    head->next = NULL; 
} 
else{ 
    Node * current = head; 
    while(current != NULL){ 
     current = current->next; 
    } 
    if(current == NULL){ 
     Node *temp = new Node; 
     temp->key = key; 
     temp->next = NULL; 
     current = temp; 
    } 
} 
} 
+2

'Node * head = Node;'これはどういう意味ですか? –

+2

[リンクされたリストの最後に要素を追加する方法](http://stackoverflow.com/questions/20384407/how-to-add-elements-to-the-end-of-a-linked-リスト)。基本的にあなたのwhileループは 'while(current-> next!= NULL)'でなければならず、 'if'を削除するか、' if(current-> next == NULL) 'に変更してください。もちろん、@ LuchianGrigoreによって指摘されている問題に対処してください。 –

答えて

0

Nodeフィールドに実際に値を割り当てていません。名前が本当に混乱するように、クラス名を持つクラスを避けるには、nodeという名前を付けることを検討してください。

最後に、current->next != NULLであるため、最後の要素を見つけるループが間違っています。

C/C++では、ダブルポインタでさらに単純化でき、if-elseを完全に取り除くことができました。その場合、割り当てとチェックの両方がポインタ参照の一部になるため、前の段落は無効になります。

Node **currentPointer = &node; /* or head or however you name the field head */ 

while (*currentPointer != NULL) { 
    currentPointer = &(*currentPointer)->next; 
} 
Node *temp = new Node; 
temp->key = key; 
temp->next = NULL; 
*currentPointer = temp;