我有一个倒退的链表。当我想把它们放在前面时,我似乎是在列表的后面添加元素。 我的节点如下所示:
struct node{
int data;
struct node* next;};
接下来我设置头部和变量
int info,x,listLength;
struct node *head = NULL;
struct node *temp;
printf("How many nodes?\n");
scanf("%d",&listLength);
现在我在列表中提示输入新条目,然后沿节点移动
for(x=1;x<=listLength;x++){
printf("Insert an X value for node %d\n",x);
scanf("%d",&info);
temp = (struct node*)malloc(sizeof(struct node));
temp->data = info;
temp->next = head;
head = temp;
}
最后我输出结果并释放内存空间
while(temp!=NULL){
printf("WE GOT %d\n",temp->data);
temp = temp->next;
}
free(temp);
但是,如果我为三个节点输入输入并输入1,2然后输入3,则输出为3,2,然后输出1!如何更改此项以确保将节点添加到正确的位置? 提前谢谢!
答案 0 :(得分:0)
你的代码在说
temp->next = head;
head = temp;
所以你要添加到列表的开头而不是结尾,所以“反向顺序”是正确的。
要添加到最后,您需要跟踪您添加的最后一个节点(例如struct node tail
),或者您需要从头部搜索下一个ptrs直到next = null以查找添加新节点的位置。
另外:为什么最后free(temp)
?因为它在while(temp != NULL)
之后,所以它意味着temp必须等于null。你想要释放整个清单还是什么?
答案 1 :(得分:0)
您的head
指针指向最后一个对象,这就是为什么您将这些数字“向后”。
输入:1,2,3
head [data:3](最后一件事temp
指出) - &gt;下一个[数据:2] - &gt;下一个[数据:1] - &gt; NULL
答案 2 :(得分:0)
它正常工作..你想把新节点放在列表前面,对吧?在1之后,你是这样添加的。所以现在列表将是:2-> 1,同样地,3-> 2-> 1