c++ - 链表中节点赋值的概念意义

标签 c++ pointers data-structures linked-list

我只是想知道,在链表中,两者有什么区别:

node1 = node2

node1->next = node2

第一行让我有点困惑。

最佳答案

我在这里根据上下文假设 node1node2 是指向节点的指针(例如,它们可能具有类似 Node * 的类型>).如果不是这样,请告诉我!

如果 node1node2 是指针,请记住指向节点的指针实际的、诚实的-goodness 节点对象。这些指针只是一种表达“看那边,你会找到一个节点”的方式。节点本身是包含数据和到其他节点的链接的实际对象。

例如,如果您有两个指向节点的节点指针 node1node2,它可能看起来像这样:

+----------+              +----------+
|          | -----------> |  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/

相关文章:

c++ - 如何使用 OpenCV 2.3.1 连接网络摄像机?

c++ - 通过 C++ 与 fst 在 R 中将对象写入磁盘

c++ - 如何将 2D vector 大小与操作系统内存地址限制进行比较?

java - Java中linkedList实现的删除方法

c++ - 指针正在以某种方式失效,这会导致访问冲突

java - 如何初始化arraylist的arraylist

Java 堆栈查看

C++ 浮点表示

c++ - *(Pointer + Index) 和 Pointer[] 之间的区别

c - 链表 - 在 C 中的链表末尾插入一个节点