struct Node{
int data;
struct Node* next;
};
struct Node* head;
void Insert(int x){
struct Node* temp = (struct Node*)malloc(sizeof(struct Node));
temp->data=x;
temp->next=NULL;
head=temp;
}
void Print(){
struct Node* temp=head;
printf("List is: n");
do{
printf("%d", temp->data);
temp=temp->next;
}while(temp!=NULL);
}
int main(){
head = NULL;
printf("How many numbers do you want to put into a list? n");
int n, i, x;
scanf("%d", &n);
for (i=0; i<n; i++){
printf("Enter the number: n");
scanf("%d", &x);
Insert(x);
Print();
}
}
此代码仅打印最后一个元素。我已经检查了多次,似乎找不到错误。如果有人能告诉我哪里出了问题,我将不胜感激。
提前致谢
head=temp;
此行将覆盖您以前的head
。这就是为什么您只能打印最后一个元素的原因。
在链表中,有两种类型的数据输出:FIFO(先进先出(和LIFO(后进先出(。
例如:
Input = 1 2 3 4
先进先出
Output = 1 2 3 4
后进先出
Output = 4 3 2 1
先进先出
您应该声明struct Node* tail;
temp->next=NULL;
后,您应该添加:
if(head==NULL){
head=temp;
tail=temp;
}
else{
tail->next=temp;
tail=temp;
}
请注意,在FIFO中不得移动头部。因此,我们需要使用 tail 来添加其他数据。
后进先出
temp->next=NULL;
后,您应该添加:
temp->next=head;
head=temp;
这两个
语句:
temp->next=NULL;
head=temp;
将丢失以前插入的数据。用
temp->next=head;
head=temp;
相反。这会将新元素与列表的其余部分放在首位。