为什么此代码只打印链表的最后一个元素?

时间:2015-12-15 17:19:15

标签: c linked-list

app/views

此代码仅打印最后一个元素。我多次检查过,我似乎无法找到错误。我真的很感激如果有人能告诉我哪里出错了。

提前致谢

2 个答案:

答案 0 :(得分:2)

head=temp;

此行将覆盖您之前的head。这就是为什么你只能打印最后一个元素的原因。

在链表中,有两种类型的数据输出:FIFO(先进先出)和LIFO(后进先出)。

例如:

Input = 1 2 3 4

FIFO

Output = 1 2 3 4

LIFO

Output = 4 3 2 1

<强> FIFO

您应该声明struct Node* tail;

temp->next=NULL;之后你应该添加:

if(head==NULL){
    head=temp;
    tail=temp;
}
else{
    tail->next=temp;
    tail=temp;
}

请注意,不得在FIFO中移动磁头。因此我们需要使用tail来添加其他数据。

<强> LIFO

temp->next=NULL;之后你应该添加:

temp->next=head;
head=temp;

答案 1 :(得分:1)

这两个陈述:

temp->next=NULL;
head=temp;

将丢失先前插入的数据。使用

temp->next=head;
head=temp;

代替。这将使新元素与列表的其余部分保持一致。