为什么链表使用指针而不是将节点存储在节点内部

127

我之前在Java中广泛使用链表,但是我对C++非常陌生。我正在使用这个在项目中给我的节点类,感觉还不错。

class Node
{
  public:
   Node(int data);

   int m_data;
   Node *m_next;
};

但是我有一个问题没有得到很好的回答。为什么需要使用?

Node *m_next;

指向链表中下一个节点的位置,而不是

Node m_next;

我知道使用指针版本会更好;我不会对事实进行争论,但我不知道为什么它更好。我得到了一个关于指针如何更好地进行内存分配的不太清楚的答案,我想知道是否有人能在这方面帮助我更好地理解。


14
请问您说什么?为什么一个一切都是指针的语言会没有链表?请原谅我的困惑。 - Angew is no longer proud of SO
41
需要注意的是,在对象指针和引用方面,C和C++与Java有所不同。Node m_next并不是对节点的引用,而是存储整个Node本身的空间。 - Brian Cain
41
Java确实有指针,只是你不需要显式地使用它们。 - m0meni
27
“一直往下的乌龟”不是一个选择。疯狂必须在某个地方结束。 - WhozCraig
26
请忘记您所知道的有关Java的一切。C++和Java在处理内存方面有根本的不同。请参见此问题以获取书籍推荐,选择一本并阅读它。您将为我们所有人做出巨大贡献。 - Rob K
显示剩余17条评论
11个回答

0
为什么链表使用指针而不是存储节点内部的节点?
当然,这个问题有一个显而易见的答案。
如果它们没有通过指针将一个节点链接到下一个节点,它们就不会是链表了。
链表存在的原因是我们想要能够将对象串联在一起。例如:我们已经有了来自某处的对象。现在我们想将该实际对象(而不是副本)放在队列的末尾。这可以通过从队列上最后一个元素添加一个链接来实现,以便我们添加条目。在机器术语中,这就是用下一个元素的地址填写单词。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接