連結リストにおける current != NULL と current->next != NULL の違いは？


授業で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]




両者の違いですが、それぞれが属している`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)

