我正在尝试实现一个链表。在将这些数字添加到链表时,程序会询问一个数字,直到输入一个负数。但是当我尝试打印链表时,最后一个元素输入链接列表重复打印。如果输入数字1,2,3,则数字3将重复打印
#include<stdio.h>
#include<stdlib.h>
struct node{
int data;
struct node* next;
};
struct node* head;
void print(){
for(struct node* ptr = head;ptr!=NULL;ptr=ptr->next){
printf("the num %d\n",ptr->data);
}
}
int main(){
head = NULL;
struct node* temp = (struct node*)malloc(sizeof(struct node));
int i;
do{
printf("enter a number\n");
scanf("%d",&i);
if(i<0)
break;
temp->data = i;
temp->next = NULL;
if(head == NULL){
head = temp;
}else{
temp->next = head;
head = temp;
}
}while(i>=0);
print();
return 0;
}
答案 0 :(得分:1)
struct node* temp = (struct node*)malloc(sizeof(struct node));
此行在外部循环完成,因此所有元素都使用相同的内存单元格...将内部的移动到循环中。
do{
printf("enter a number\n");
scanf("%d",&i);
if(i<0)
break;
struct node* temp = malloc(sizeof(struct node));
temp->data = i;
temp->next = NULL;