

授業でC++を使って連結リストを学んでいます。

リストを表示するプログラムを書いているのですが、`current != NULL;` と `current->next != NULL`
の違いがわかりません。current はリスト内を移動するためのポインターです。

説明不足かもしれませんがどなたかわかる方がいましたら、お願いします。

[code]

    void display_every_item(node * head)
    {
        node * current = head;
        while (current != NULL)  //while (cu
        {
            cout << current->data << ' ';
            current = current->next;
        }
    }
    
    //Display JUST the last item
    void display_just_last(node * head)
    {
        if (NULL == head) // if (!head) - nothing to display
            return;
        node * current = head;
        while ( current->next != NULL) //Stop at the last node
        {
            current = current->next;
        }
        cout << "The last item is: " << current->data <<endl;
    
[/code]


CC BY-SA 4.0
2021-03-11T16:21:26.410
74598
2021-03-15T05:12:19.973
2021-03-15T05:12:19.973
3060
44009
question
c++
連結リストにおける current != NULL と current->next != NULL の違いは？


両者の違いですが、それぞれが属している`display_every_item`と`display_just_last`と言う関数が目的とする結果の違いのために、必要とする処理が違うので、違った記述が使われているというのが回答です。  
関数の名前自身が説明の一助になっていますので、そうした情報も含めて判断してください。

  * `current != NULL`は`display_every_item`(全ての項目(=ノード)を都度表示する)ために、現在の項目へのポインタが有効な値かどうかを判定しています。有効な項目であれば内容のデータを表示して次の項目へ移動します。
  * `current->next != NULL`は`display_just_last`(最後の項目(=ノード)だけを表示する)ために、次の項目へのポインタが有効な値かどうかを判定しています。次の項目へのポインタがNULLだったら最後の項目を見つけたのでループを終了するということです。

ただし前者の`display_every_item`については冗長で判定の場所や考え方も変わりますが、`current !=
NULL`ではなく`current->next != NULL`を使うことも出来ます。  
こんな記事を参考に。

  * 質問と同じ`current != NULL`：  
[単一リンクリスト(Singly Linked List)の説明とサンプルコード(C
++)](https://codechacha.com/ja/singly-linked-list-in-cpp/)  
こちらはC言語 [データ内容の表示 - 線形リスト](http://www.cc.kyoto-
su.ac.jp/%7Eyamada/ap/list.html#display)

  * 質問の2つ目と同じ`current->next != NULL`：(C++ではなくCですが)  
[【C言語】よくわかる構造体とリスト構造。(前編)](https://www.mafuyu7se.com/entry/2018/12/16/204414)


CC BY-SA 4.0
2021-03-12T01:12:28.487
74605
2021-03-14T04:08:10.070
2021-03-14T04:08:10.070
19110
26370
74598
answer


currentにNULLが代入されちゃうとリストのどこにいたのかわからなくなっちゃうので  
current->nextがNULLかどうかを判定しているだと思います。  
current->nextがNULLならcurrentはリストの末尾ですね。


CC BY-SA 4.0
2021-03-12T01:13:55.773
74606
2021-03-12T01:13:55.773
18637
74598
answer