2017-11-14 13 views
0

ノードをリンクリストに追加する関数をビルドする方法を理解できていないようです。C++のノードのメモリアドレスを設定する

これまでのところ、私はこれを持っています。

void StringList::add(string value){ 
StringNode *temp = new StringNode; 
temp->data = value; 
temp->next = NULL; 

if(head==NULL){ 
    head = temp; 
    temp = NULL; 
} 

リストに追加するたびに前のノードのメモリアドレスを設定する方法がわかりません。理想的には、私は自分自身にテールノードを与えていたでしょうが、私はドライバとヘッダーファイルを提供していました。どんな洞察にも感謝します。

+0

ノードをリストの先頭に追加する場合は、新しいノードを作成し、新しいノードの「next」をリストの現在のヘッドに設定してから、「head」を新しいノードをポイントします。あなたのリストが空でない限り、 'next'は(通常)nullです。 – Steve

+0

「前のノードのメモリアドレスを設定する」とはどういう意味ですか?ノードのアドレスは決して変更しないでください。そうしないと、リンクされたリストの目的を破ってしまいます。あなたはちょうどリンクを調整する必要があります。 – PaulMcKenzie

+0

@ user8891853リスト定義を表示します。 –

答えて

2

あなたがtailを維持せずに、リストの末尾に新しいノードを追加したい場合は、リスト全体たびに移動する必要があります:

void StringList::add(string value){ 
    StringNode *temp = new StringNode; 
    temp->data = value; 
    temp->next = NULL; 

    if(head==NULL){ 
    head = temp; 
    } 
    else { 
    StringNode* last = head; 
    while (last->next) { 
     last=last->next; 
    } 
    last->next = temp; 
    } 
} 
0

これを解決する最も簡単な方法をあなたは、教育目的のためにメモリの割り当てを使用することが義務付けている、とあなたは手動のメモリ割り当てを通過する必要があり、そのようなことは、あなたがにリストを反復する必要がある場合

​​

std::listを使用することは確かです最後のノードを見つける:

関連する問題