修改如下:
//---------------------------------------------------------------------------
#include
#include
typedef struct node
{
int data;
struct node *next;
} LinkList;
void addList(LinkList *head,int a[],int n)
{
LinkList *p;
int i;
/*注意这里*/
head->next=NULL;
for(i=0;i
p=(LinkList *)malloc(sizeof(LinkList));
p->data=a[i];
p->next=head->next;
head->next=p;
}
}
LinkList *InitList(void)/*注意这里*/
{
LinkList *head;
head=(LinkList *)malloc(sizeof(LinkList));
head->next=NULL;
return head;
}
void DisPList(LinkList *head)
{
LinkList *p=head->next;
while(p!=NULL)/*注意这里*/
{
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void main(){
struct node *hhhd;
int n,i;
int *a;/*注意这里*/
hhhd=InitList();/*注意这里*/
printf("请输入元素个数:");
scanf("%d",&n);
a=(int*)malloc(sizeof(int)*n);/*注意这里*/
printf("请输入各个链表元素:");
for(i=0;i
printf("请输入第%d个元素:",i+1);
scanf("%d",&a[i]);
}
addList(hhhd,a,n);
DisPList(hhhd);
}
//---------------------------------------------------------------------------
改好了
头指针
head
你没给分配空间
#include
#include
typedef
struct
node{
int
data;
struct
node
*next;
}linklist;
linklist
*head
=
(linklist*)malloc(sizeof(linklist));
//这里
好了
node
*createlist(){
int
i,n;
linklist
*s,*r;
r=head;
printf("输入的数据:\n");
scanf("%d",&n);
for(i=0;i
s=(linklist*)malloc(sizeof(linklist));
scanf("%d",&s->data);
r->next=s;
r=s;
}
r->next=NULL;
return(head);
}
void
print(linklist
*head)
{
linklist
*p;
p=head->next;
if(!p)
{printf("\nlist
is
empty.
press
eny
key
back.");}
while(p)
{
printf("%d
",p->data);
p=p->next;
}
}
main(){
head=createlist();
print(head);
}
输入的数据:
4
55
33
44
66
55
33
44
66
Press
any
key
to
continue
程序运行是会崩溃的,你没有为head分配空间,会崩溃在这一句r->next=s;
你这样的设计是很不合理的,创建就应该只做创建的动作,增加节点应该添加在add函数中