1 struct node
2 {
3 int data;
4 struct node *next;
5 }*head;
6
7 void append(int num)
8 {
9 struct node *temp,*right;
10 temp= (struct node *)malloc(sizeof(struct node));
11 temp->data=num;
12 right=(struct node *)head;
13 while(right->next != NULL)
14 right=right->next;
15 right->next =temp;
16 right=temp;
17 right->next=NULL;
18 }
我需要帮助理解此代码的某些部分。
1)代码应该做什么?
2) 5号线有什么作用?
}*head;
当我制作结构时,我习惯于看到这一点:
struct node
{
int data;
struct node *next;
};
3)12号线应该做什么?不确定此语法
right=(struct node *)head;
我的猜测是,它接受头部所指向的内容,并且也正确指向它。那么为什么不直接做:right = head;
谢谢!
所以,这可能不是最完整的答案:关于}*head;
,这只是立即声明结构的头部,一个名为 head 的实例,它本身就是指向结构体实例的指针。 然后,稍后,在第 12 行,带有 right = (struct node *)head
,指针被投射。 也许这是为了安全或清晰;我不确定。
5 行声明一个全局变量head
该变量是指向之前声明的结构类型的指针。
第 12 行将head
分配给right
。演员表不是必需的。
该函数分配一个新节点,为data
成员提供 num
的值,转到列表的末尾并追加它。
15 right->next =temp;
16 right=temp;
17 right->next=NULL;
第 15 行追加新节点。可变right
现在可用,并为其分配了temp
。现在,第 16 行将列表中最后一个成员的next
成员设置为 null。最后两行可以简单地写成temp->next= NULL;
.