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语句究竟在做什么? 如果我们评论那部分代码,为什么我们会出现分段错误?
新的链接列表,所以任何帮助将不胜感激
答案 0 :(得分:2)
对于这段代码(如果是部分):
temp->ptr = head;
temp = head;
首先请注意,head
是一个错误的名称,更有意义的是new_node
,ptr
字段应该命名为next_node
。然后,此代码将新创建的节点链接到列表tmp
的最后一个链接。
对于这个(其他部分):
first = temp = head;
这会初始化列表的第一个节点的所有内容,first
然后指向新创建的节点,temp
指向列表的最后一个元素(缩减为单个节点:新创建的一个)。