我正在尝试实现一个链表。程序将要求一个数字,直到输入负数,同时将这些数字添加到链表中。但是当我尝试打印链表时,输入到链表中的最后一个元素会重复打印。如果我输入数字 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 %dn",ptr->data);
}
}
int main(){
head = NULL;
struct node* temp = (struct node*)malloc(sizeof(struct node));
int i;
do{
printf("enter a numbern");
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;
}
struct node* temp = (struct node*)malloc(sizeof(struct node));
这条线是在循环外完成的,所以你的所有元素都使用相同的存储单元......在循环内移动分配。
do{
printf("enter a numbern");
scanf("%d",&i);
if(i<0)
break;
struct node* temp = malloc(sizeof(struct node));
temp->data = i;
temp->next = NULL;