链接列表向后显示

时间:2013-06-05 06:31:27

标签: c list loops struct linked-list

我有一个倒退的链表。当我想把它们放在前面时,我似乎是在列表的后面添加元素。 我的节点如下所示:

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!如何更改此项以确保将节点添加到正确的位置? 提前谢谢!

3 个答案:

答案 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