【问题标题】:Linked List understanding syntax链表理解语法
【发布时间】:2016-03-20 11:31:38
【问题描述】:
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;

我的猜测是它会获取 head 所指向的内容并正确指向它。那为什么不干脆做:right = head;

谢谢!

【问题讨论】:

  • 仅供参考,此代码中的 两个 类型转换都不是必需的。我经常被人们在代码中输入不必要的杂乱的倾向所迷惑。编写有效的代码已经够难了;用不必要的垃圾乱扔垃圾并不能让它变得更好。
  • 如果我这样做,它会喜欢something like this。我想,不同的人有不同的笔画。

标签: c pointers syntax linked-list


【解决方案1】:

所以,这可能不是最完整的答案: 关于}*head;,这只是立即声明结构的头部,一个名为head的实例,它本身是一个指向结构实例的指针。然后,稍后,在第 12 行,使用right = (struct node *)head,正在转换指针。也许这是为了安全或清晰;我不知道。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢保罗,这很有道理。
    • 我知道从第 13-14 行开始,我们试图到达链表的末尾,但是第 15-17 行的意义何在?我不明白你为什么要先将 temp 附加到 right->next,然后将 temp 附加到后面,然后使 right->next = NULL。你不能只删除第 15 行,因为它是多余的吗?
    • 对不起,我明白了。第 15 行,将 temp 附加到列表的末尾 第 16 行,使正确指向 temp 第 17 行,使 temp 指向的内容为 null
    猜你喜欢
    • 2023-01-02
    • 2010-10-06
    • 2016-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 2010-10-31
    • 1970-01-01
    • 2012-05-07
    相关资源
    最近更新 更多