以下代码应该在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;
}
答案 0 :(得分:4)
head
将指向链表的开头(列表中的第一个条目)。要获取后续元素,只需按照next
内的node
指针。
每次添加新节点时,都会将新元素的next
设置为当前head
,并将head
设置为新元素,以便将元素链接在一起。< / p>
答案 1 :(得分:2)
问:结构中的结构体在C中意味着什么?
答:在这种情况下,“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”为null。当它是列表中的最后一项时,每个“next”始终为null。
“Head”仅更改一次 - 初始化列表时。 “Next”更改两次:1)首次添加节点时设置为null,2)添加后续节点时重置为指向下一个节点。
'希望有所帮助..