我只是想知道,在链表中两者之间的区别是什么:
node1 = node2
和
node1->next = node2
第一行让我有点困惑。
答案 0 :(得分:2)
我假设从上下文中node1
和node2
是指向节点的指针(例如,它们可能具有类似Node *
的类型)。如果不是这样,请告诉我!
如果node1
和node2
是指针,请记住指向节点的指针和实际的,诚实到善的节点对象之间存在差异。指针只是一种说法“看那边,你会找到一个节点。”节点本身是包含数据和指向其他节点的链接的实际对象。
例如,如果您有两个指向节点的节点指针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
指向。
每当您对涉及指针或链接列表等的代码行有疑问时,我强烈建议您绘制如此处所示的图片。为您正在创建的链接以及您正在破坏的链接建立直观的直觉是更好地理解代码如何工作的最佳方式之一。另外,它非常适合调试!