这段代码在这里做什么?

时间:2016-05-26 10:07:06

标签: c

void main()
{
struct node
{
    int num;
    struct node *ptr;
};
typedef struct node NODE;

NODE *head, *first, *temp = 0;
int count = 0;
int choice = 1;
first = 0;

while (choice)
{
    head  = (NODE *)malloc(sizeof(NODE));
    printf("Enter the data item\n");
    scanf("%d", &head-> num);
    if (first != 0)         // what the
    {                       // heck is
        temp->ptr = head;   // this
        temp = head;        // piece
    }                       // doing
    else                    // right 
    {                       // here ?   
        first = temp = head;
    }

    printf("Do you want to continue(Type 0 or 1)?\n");
    scanf("%d", &choice);

}
temp->ptr = 0;
/*  reset temp to the beginning */
temp = first;
printf("\n status of the linked list is\n");
while (temp != 0)
{
    printf("%d=>", temp->num);
    count++;
    temp = temp -> ptr;
}
printf("NULL\n");
printf("No. of nodes in the list = %d\n", count);
}

为什么第一个被初始化为0? if else语句究竟在做什么? 如果我们评论那部分代码,为什么我们会出现分段错误?

新的链接列表,所以任何帮助将不胜感激

1 个答案:

答案 0 :(得分:2)

对于这段代码(如果是部分):

   temp->ptr = head;
   temp = head;

首先请注意,head是一个错误的名称,更有意义的是new_nodeptr字段应该命名为next_node。然后,此代码将新创建的节点链接到列表tmp的最后一个链接。

对于这个(其他部分):

first = temp = head;

这会初始化列表的第一个节点的所有内容,first然后指向新创建的节点,temp指向列表的最后一个元素(缩减为单个节点:新创建的一个)。