代码如下,谢谢了佬们
#include
#include
typedef struct link
{
int data;
struct link *next;
}link;
link *ap(link *head,int *d);
link *dis(link *head);
int main()
{
int a=1;
link *head=NULL;
while(a!=0)
{
*ap(head,&a);
*dis(head);
}
}
link *ap(link *head,int *d)
{
link *p;
p=(link*)malloc(sizeof(link));
if(head==NULL)
{
head=p;
}
else
{
while(head->next!=NULL)
{
head=head->next;
}
head->next=p;
}
scanf("%d",d);
p->data=*d;
p->next=NULL;
return head;
}
link *dis(link *head)
{
if(head!=NULL)
{
printf("%d",head->data);
head=head->next;
}
return head;
}
在主函数中,你调用了ap和dis两个函数,并将返回值赋值给head,但是你在调用ap和dis函数时使用了*号,这会导致head的值被重新赋值为NULL,导致无法正常输出。
正确的做法应该是:
head = ap(head,&a);
head = dis(head);
还有一处需要修改,在while循环里你应该在读入数据之后判断是否继续循环,而不是在读入之前,这样可以保证第一个数据也能被正确读入。
代码如下
#include<stdio.h>
#include<stdlib.h>
typedef struct link
{
int data;
struct link *next;
}link;
link *ap(link *head,int *d);
link *dis(link *head);
int main()
{
int a=1;
link *head=NULL;
while(a!=0)
{
scanf("%d",&a);
head = ap(head,&a);
head = dis(head);
}
}
link *ap(link *head,int *d)
{
link *p;
p=(link*)malloc(sizeof(link));
if(head==NULL)
{
head=p;
}
else
{
while(head->next!=NULL)
{
head=head->next;
}
head->next=p;
}
p->data=*d;
p->next=NULL;
return head;
}
link *dis(link *head)
{
if(head!=NULL)
{
printf("%d",head->data);
head=head->next;
}
return head;
}
若对您的问题有帮助,望采纳
题主的代码修改如下,供参考:
#include<stdio.h>
#include<stdlib.h>
typedef struct _link //修改
{
int data;
struct _link *next;//修改
}link;
link *ap(link *head,int *d);
void dis(link *head); //link *dis(link *head);//修改
int main()
{
int a=1;
link *head=NULL;
while(a!=0)
{
head = ap(head, &a);//*ap(head,&a);
dis(head); //*dis(head);
}
return 0;
}
link *ap(link *head,int *d)
{
link *p, *q = NULL;//修改
scanf("%d",d); //修改
if (*d != 0) //修改
{
p=(link*)malloc(sizeof(link));
p->data=*d;
p->next=NULL;
if(head==NULL)
{
head=p;
}
else
{
q = head;//修改
while(q->next!=NULL)//while(head->next!=NULL) //修改
{
q=q->next;//head=head->next; //修改
}
q->next=p; //head->next=p; //修改
}
}
return head;
}
void dis(link *head) //link *dis(link *head)//修改
{
while(head!=NULL) // if(head!=NULL) //修改
{
printf(" %d",head->data);
head=head->next;
}
printf("\n"); //修改
//return head; //修改
}