c 中的 SLL 在列表中的屏幕元素上打印一个额外的随机数

SLL in c prints one extra random on the screen elements in list

我 运行 我的代码,它会在我们输入元素编号的屏幕上额外打印一个随机数,我想知道我在创建列表时哪里出错了?

struct emp {
    int x;
    struct emp* next;
};
typedef struct emp* node;

int main(){
    int elemanSayisi;
    struct emp *root,*iter;
    root=(struct node *)malloc(sizeof(struct emp));
    iter=root;
    printf("enter number of elements: ");
    scanf("%d",&elemanSayisi);
    for(int i=0;i<elemanSayisi;i++){
        iter->next=(struct node *)malloc(sizeof(struct emp));
        printf("\n%d. enter the element: ",i+1);
        scanf("%d",&iter->x);
        iter=iter->next;
        iter->next=NULL;
    }
    int b=1;
    iter=root;
    while(iter!=NULL){
        printf("\n%d. element: %d",b,iter->x);
        iter=iter->next;
        b++;
    }
}

使用指向 emp 的指针可以简化对第一个节点的处理。之后我还添加了代码来释放列表:

struct emp {
    int x;
    struct emp* next;
};

int main(){
    int elemanSayisi;
    struct emp *root = NULL;
    struct emp *iter;
    struct emp **ppemp = &root;
    printf("enter number of elements: ");
    scanf("%d",&elemanSayisi);
    for(int i=0;i<elemanSayisi;i++){
        iter = *ppemp = (struct emp *)malloc(sizeof(struct emp));
        iter->next=NULL;
        printf("\n%d. enter the element: ",i+1);
        scanf("%d",&iter->x);
        ppemp = &(iter->next);
    }
    int b=1;
    iter=root;
    while(iter != NULL){
        printf("\n%d. element: %d",b,iter->x);
        iter=iter->next;
        b++;
    }
    iter = root;                /* free nodes */
    while (iter != NULL) {
        root = iter->next;
        free(iter);
        iter = root;
    }
    return 0;
}