リンクリストはなぜノードをノード内に格納するのではなくポインタを使用するのでしょうか?質問する

リンクリストはなぜノードをノード内に格納するのではなくポインタを使用するのでしょうか?質問する

私はこれまでJavaでリンクリストを広範囲に扱ったことがありますが、C++については初心者です。プロジェクトで与えられたこのノードクラスを問題なく使用していました。

class Node
{
  public:
   Node(int data);

   int m_data;
   Node *m_next;
};

しかし、あまりよく答えられなかった質問が1つありました。なぜ

Node *m_next;

リスト内の次のノードを指す代わりに

Node m_next;

ポインター バージョンを使用する方がよいことは理解しています。事実を論じるつもりはありませんが、なぜそれがよいのかはわかりません。ポインターがメモリ割り当てに適している理由について、あまり明確ではない回答を得たので、ここで誰かがそれをよりよく理解するのを手伝ってくれるかどうか疑問に思っています。

ベストアンサー1

それは単に良いというだけではなく、唯一の可能な方法なのです。

もしあなたがNode 物体それ自体の内部では、何にsizeof(Node)なるでしょうか? それは でありsizeof(int) + sizeof(Node)、これは に等しくsizeof(int) + (sizeof(int) + sizeof(Node))、これは に等しくsizeof(int) + (sizeof(int) + (sizeof(int) + sizeof(Node)))、などと無限大になります。

そんなものは存在できない。不可能

おすすめ記事