【发布时间】:2016-10-30 16:30:44
【问题描述】:
我已经在谷歌和一些教科书上搜索了一段时间,但我似乎无法理解为什么在构建链表时,节点需要是指针。
例如。如果我有一个节点定义为:
typedef struct Node{
int value;
struct Node *next;
} Node;
为什么要创建一个链表,我会说:
Node *a = malloc(sizeof(Node));
Node *b = malloc(sizeof(Node));
a->value = 1;
b->value = 2;
a->next = b;
b->next = NULL;
而不是:
Node a, b;
a.value = 1;
b.value = 2;
a.next = &b;
b.next = NULL;
据我了解,列表仍然可以正常引用和遍历,唯一的区别是使用点、& 语法而不是箭头?
【问题讨论】:
-
您的
Node *a, *bsn-p 无效。您正在声明指针变量,而不是让它们指向有效内存。指针几乎肯定不会指向有效的Node对象 -
在第二个示例中,考虑如何将数百个新节点添加到列表中。使用指针,您可以继续使用 malloc 在循环中添加新节点。如果没有指针,那么您需要以其他方式分配存储空间,这在一定程度上抵消了使用链表的好处。
标签: c linked-list