/*单链表的创建 随机输入一些数据,请采用尾插法创建一个带头结点的单链表,将数据存入,然后顺序遍历该单链表并输出数据,以查看是否创建成功。 输入:6 3 5 2 9 0 输出:6 3 5 2 9 备注:0代表输入结束*/ #include<stdio.h> #include<malloc.h> typedef int ElemType; typedef struct Node{ ElemType data; struct Node *next; }LNode,*Linklist; void Initial(Linklist * L){ (*L)=(Linklist)malloc(sizeof(LNode)); (*L)->next=NULL; } void TailCreate(Linklist L){ LNode *r,*s; int m; r=L; while(1){ scanf("%d",&m);{ r->next=NULL; break; } s=(LNode*)malloc(sizeof(LNode)); r->next=s; r=s;} r->next=NULL; } void show(Linklist L){ LNode *temp; temp=L->next; while(temp!=NULL){ printf("%d ",temp->data); temp=temp->next; } } int main(){ Linklist L; Initial(&L); TailCreate(L); show(L); return 0; }怎么错了
时间: 2023-06-15 09:07:14 浏览: 191
你的代码有两个问题:
1.在 TailCreate 函数中,你的 while(1) 循环没有退出条件,导致程序进入死循环状态。
2.在 TailCreate 函数中,if 语句的括号位置不正确,导致程序无法正确判断输入是否结束。
下面是修改后的代码:
```
#include<stdio.h>
#include<malloc.h>
typedef int ElemType;
typedef struct Node{
ElemType data;
struct Node *next;
}LNode,*Linklist;
void Initial(Linklist * L){
(*L)=(Linklist)malloc(sizeof(LNode));
(*L)->next=NULL;
}
void TailCreate(Linklist L){
LNode *r,*s;
int m;
r=L;
printf("请输入数据,以0结束:\n");
while(1){
scanf("%d",&m);
if(m == 0){
r->next=NULL;
break;
}
s=(LNode*)malloc(sizeof(LNode));
s->data = m;
r->next=s;
r=s;
}
}
void show(Linklist L){
LNode *temp;
temp=L->next;
while(temp!=NULL){
printf("%d ",temp->data);
temp=temp->next;
}
}
int main(){
Linklist L;
Initial(&L);
TailCreate(L);
show(L);
return 0;
}
```
现在,你可以输入数据,以 0 结束,然后程序会创建一个带头结点的单链表,并输出单链表中的数据。
阅读全文