-1

以下代码应该在 C 中创建一个单链表。我想了解 insert_node 对指针头的作用。每次调用 insert_node 时,“head”指向什么?

struct node{
    int data;
    struct node* next; 
};
typedef struct node node;

    node* head = NULL; 

void insert_node(int data) {
    node *new_node = (node*) malloc(sizeof(node)); 
    new_node->data = data;
    new_node->next = head;
    head = new_node;
}
4

2 回答 2

4

head将指向链表的开头(链表中的第一个条目)。要获取后续元素,您只需next按照node.

每次添加新节点时,next将新元素的 设置为当前元素head并设置head为新元素,以便将元素链接在一起。

于 2013-02-01T22:35:33.940 回答
2

问:结构中的结构在 C 中意味着什么?

A:在这种情况下,“struct node *”只是用作指针,指向“struct node”类型的列表项。

这是一个类型声明:

struct node{
    int data;
    struct node* next; 
};

这是一个变量定义:node* head = NULL; 相当于说struct node * head = NULL;

这是一个变量赋值:node *new_node = (node*) malloc(sizeof(node));

变量“head”只是指向列表开头的指针。每当您想使用列表时,它都是您的“起点”:包括添加内容或在列表中查找内容。

“下一个”始终指向“列表中的下一项”。在初始化列表之前,“Head”为空。每个“下一个”在列表中的最后一项时始终为空。

“头”只更改一次 - 当您初始化列表时。“下一个”更改了两次:1)第一次添加节点时将其设置为 null,2)添加后续节点时将其重置为指向下一个节点。

'希望有帮助..

于 2013-02-01T22:37:56.320 回答