C语言 链表理解语法


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;.

相关内容

  • 没有找到相关文章

最新更新