c - 难以理解链表的定义

标签 c pointers struct linked-list

我对我类定义的链表的定义有一些疑问。

这是使用的:

typedef struct node_t {
int x;
struct node_t *next;
} *Node;

现在,我了解到我们通过这种方式创建了一种更短的方法来使用指向结构 node_t 的指针。 Node 将用作 struct node_t*

现在,假设我们要创建一个链表。例如:

Node node1 = malloc(sizeof(*node1));
Node node2 = malloc(sizeof(*node2));
Node node3 = malloc(sizeof(*node3));
node1->x = 1;
node1->next = node2;
node2->x = 4;
node2->next = node3;
node3->x = 9;
node3->next = NULL;

这就是我的大致想象(圆圈代表结构):

enter image description here 现在我知道这是错误的,但我不明白为什么。我们有一个指针,node1,它指向我们的结构。然后,我们指向 node2,它指向另一个结构等等。

另一件事是,我不明白图片中怎么可能有更长的箭头。我们不应该只能从圆圈的每个较低部分指向一个结构,而不是指向一个结构的指针吗?这怎么可能?

如果这里有人能让事情更清楚一点,我们将不胜感激。非常感谢。

最佳答案

您有三个链接节点,以及指向它们的其他本地指针。
尽管使用它们的名称来引用节点通常很方便,但节点对这些本地指针一无所知。
相反,他们知道序列中的下一个节点,而最后一个节点不知道。

换句话说,您的图片完全错误。

          +---+------+
node1 --> | 1 | next |
          +---+-|----+
                |
                v
          +---+------+
node2 --> | 4 | next |
          +---+-|----+
                |
                v
          +---+------+
node3 --> | 9 | NULL |
          +---+------+

关于c - 难以理解链表的定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55641519/

相关文章:

c - main 中的可变参数列表

c - 如何将 token (strtok)存储在数组的指针中

c - C 语言的战舰、数组和结构体

c - SQLite C 用户定义函数

c - OpenMP 并行代码较慢

c++ - 从 C++ 中的链表中删除一个元素

c - 为什么访问结构时会出现段错误?

ios - swift 3 : Using Two Arrays to populate grouped Table

clang-format 与数组初始化

c - 将指向 char 数组的指针作为参数传递给函数 - C