重复打印最后输入的链表元素

时间:2018-03-08 19:59:53

标签: c linked-list

我正在尝试实现一个链表。在将这些数字添加到链表时,程序会询问一个数字,直到输入一个负数。但是当我尝试打印链表时,最后一个元素输入链接列表重复打印。如果输入数字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;
}

1 个答案:

答案 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;