c - 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++;
}
}
解决方案
使用指向 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;
}
推荐阅读
- android - 不是让 RN 认为它是电视的方法,即使它不是(修改 uiMode?)
- flutter - 发生异常。RangeError(RangeError(索引):无效值:不在包含范围内 0..4:5)
- flutter - 显示水平滚动条颤动
- android - Android - 如何将 selectableItemBackground 应用于整个 ListView 项目?
- node.js - node.js 提供的静态站点中缺少 s3 密钥错误
- python - Tkinter 两个窗口 OptionMenu 问题
- python - 无法让 pygame 在 M1 下运行
- android - 为什么即使我关闭了 Wi-Fi,IsConnected Android 函数也总是返回 true?
- javascript - 在 React 中处理带有受控内容可编辑的光标
- vuejs2 - Vue 计算属性未更新