我只是想知道,在链表中,两者有什么区别:
node1 = node2
和
node1->next = node2
第一行让我有点困惑。
最佳答案
我在这里根据上下文假设 node1
和 node2
是指向节点的指针(例如,它们可能具有类似 Node *
的类型>).如果不是这样,请告诉我!
如果 node1
和 node2
是指针,请记住指向节点的指针和实际的、诚实的-goodness 节点对象。这些指针只是一种表达“看那边,你会找到一个节点”的方式。节点本身是包含数据和到其他节点的链接的实际对象。
例如,如果您有两个指向节点的节点指针 node1
和 node2
,它可能看起来像这样:
+----------+ +----------+
| | -----------> | data! |
+----------+ +----------+
node1 | next! | -----> ...
+----------+
+----------+ +----------+
| | -----------> | data! |
+----------+ +----------+
node2 | next! | -----> ...
+----------+
如果你写 node1->next = node2
,你是在说“跟随名为 node1
的指针,看看它指向哪个节点,找到 该节点中的 next
指针,并将其更改为指向 node2
指向的任何位置。”这使得事情看起来像这样:
+----------+ +----------+
| | -----------> | data! |
+----------+ +----------+
node1 | next! | -----> ...
+----------+
|
|
v
+----------+ +----------+
| | -----------> | data! |
+----------+ +----------+
node2 | next! | -----> ...
+----------+
编写 node1 = node2
意味着“将 node1
更改为指向 node2
指向的任何节点。”看起来像这样:
+----------+ +----------+
| | ------+ | data! |
+----------+ | +----------+
node1 | | next! | -----> ...
| +----------+
| |
| |
| v
+----------+ | +----------+
| | ------+----> | data! |
+----------+ +----------+
node2 | next! | -----> ...
+----------+
从根本上说,这些操作之间没有太大区别。他们都改变了一些指针指向的地方。区别在于您是在更改节点对象内部的 next
指针,还是在更改 node1
指向的节点。
每当您对涉及指针或链表等的代码行的作用有疑问时,我强烈建议您像此处显示的那样绘制图片。对正在创建的链接和正在断开的链接建立视觉直觉是更好地理解代码工作原理的最佳方法之一。另外,它非常适合调试!
关于c++ - 链表中节点赋值的概念意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993365/