c中链表中的头节点

sid*_*893 2 c linked-list head

在研究 c 中的链表时,我遇到了头节点的 2 种不同实现。说如果以下是使用的结构:

struct node
{
 int data;
 struct node *next;
}
Run Code Online (Sandbox Code Playgroud)

那么第一个实现是头节点只是一个虚拟节点,其中没有实际数据,而只是到另一个节点(第一个实际节点有数据)的链接,如下所示:

struct node *head;
head->next = NULL;  //head->next would then be linked to the first node.
Run Code Online (Sandbox Code Playgroud)

第二个实现是头节点是第一个实际节点,其中包含数据,使用 malloc 命令为其分配空间。

我的问题是,在我们完全没有使用 malloc 为 head 分配空间的第一个实现中,我们如何使用“head->next”?因为据我所知(如果我错了,请纠正我),节点的两个字段只能在为该节点分配空间后使用。

Geo*_*rge 5

Malloc 仅在动态分配内存时才需要。如果你struct node head在方法内部写一些类似的东西,头节点将被分配在堆栈上,并将在那里生存(和死亡)。因此,您可以向该节点写入数据,但是一旦该方法完成它就会死亡。

或者,您可以全局定义头部,在这种情况下,它将被静态分配并永远存在,直到程序退出。Malloc 仅在您想要创建一块内存时才需要,该内存将在函数退出后继续存在。只有当你调用free指针时它才会被清除。