链接列表和指针混乱

时间:2019-04-20 00:36:36

标签: c pointers

我正在完成最后一个项目,因此我被介绍给链表,我必须使用它。

试图理解代码的工作原理后,我感到非常沮丧。对我而言,这个概念完全有意义。我给出的示例代码却没有。

typedef struct node_s {
    char name[20]; 
    int age; 
    struct node_s *listp; 
} node;

while (!feof(inp)) {
        temp = (node *)malloc(sizeof(node)); // creation of memory
        fscanf(inp, "%s%d", temp->name, &temp->age);
        if (head == NULL)
            head = temp; // setting the head of the list
        else { 
            tail->listp = temp; // else connecting to previous element
        }
        tail = temp; // updating the current element
        tail->listp = NULL; // setting pointer to null.
    }

当每次将其设置为NULL时,tail-> listp如何指向第二个元素我都很困惑。为了进一步说明我的困惑,在else语句中tail-> listp将指向新元素,这是可以理解的。

但是最后,我们将tail-> listp指向NULL,而忽略了else语句。但是代码运行正常,在这里,我感到非常困惑。

1 个答案:

答案 0 :(得分:2)

您丢失了之前的声明

project-root/.cache

在循环中,创建一个新元素tail = temp; // updating the current element ,并将其链接到列表上。如果是第一个元素,则从本质上来说,可以通过将列表设置为头和尾来启动列表。如果不是第一个元素,则将其链接到列表的末尾。

temp

然后,您设置tail->listp = temp; 以将指针更新到列表末尾,并确保列表末尾的元素指向空

tail=temp

您也可以

tail->listp = NULL;

如果我的眼睛不让我失望,那将是等效的。