首页 > 解决方案 > c中的SLL在列表中的屏幕元素上打印一个额外的随机数

问题描述

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

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++;
    }
}

标签: clinked-list

解决方案


使用指向 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;
}

推荐阅读