0

我有一个向后出现的链表。当我想将元素放在前面时,我似乎正在将元素添加到列表的后面。我的节点如下所示:

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

4

3 回答 3

0

你的代码说

temp->next = head;
head = temp;

所以你要添加到列表的开头,而不是结尾,所以“逆序”是正确的。要添加到末尾,您需要跟踪您添加的最后一个节点(例如struct node tail),或者您需要从头搜索下一个 ptrs 直到 next = null 以找到添加新节点的位置。

另外:为什么free(temp)最后?因为它在while(temp != NULL)它之后意味着 temp 必须等于 null。您是要释放整个列表还是什么?

于 2013-06-05T06:35:57.000 回答
0

你的head指针指向最后一个对象,这就是你得到数字“向后”的原因。

输入:1、2、3

head[data: 3] (最后temp指向的东西) -> next[data: 2] -> next[data: 1] -> NULL

于 2013-06-05T06:36:21.703 回答
0

它工作正常..您想将新节点放在列表前面,对吗?在 1 之后,您正在添加。所以现在列表将是:2->1,以同样的方式,3->2->1

于 2013-06-05T06:37:03.797 回答