#include
#include
#include
typedef struct Dian
{
int data;
struct Dian * pnext;
}DIAN,*PDIAN;
void show(PDIAN head)
{
PDIAN p=head->pnext;
while (p)
{
printf("%d ",p->data);
p=p->pnext;
}
}
PDIAN creat_list();
//void traverse_list(PDIAN pHead);
void add_list(PDIAN phead,int val);
void main()
{
PDIAN phead=NULL;
phead=creat_list();
add_list(phead,5);
show(phead);
//traverse_list(phead);
}
PDIAN creat_list()
{
PDIAN phead=(PDIAN)malloc(sizeof(DIAN));
if(phead==NULL)
{
printf("分配内存失败,程序关闭!\n");
exit(-1);
}
PDIAN pend=(PDIAN)malloc(sizeof(DIAN));
printf("请输入添加数据:");
scanf("%d",&pend->data);
phead->pnext=pend;
pend->pnext=NULL;
return phead;
}
//往链表中添加元素
void add_list(PDIAN phead,int val)
{
PDIAN p=phead;
while(p->pnext!=NULL)
{
p=p->pnext;
}
PDIAN pnew=(PDIAN)malloc(sizeof(DIAN));
if(pnew == NULL)
{
printf("分配内存失败,程序关闭!\n");
exit(-1);
}
pnew->data=val;
p->pnext=pnew;
pnew->pnext=NULL;
}
在cpp中错误的原因:
在你的add_list函数中,p=phead不为空,但是p->next的值为NULL,即为空。(你可以从 creat_list函数中找到原因)所以在语句p=p->next后p的值变为NULL了,那么你后面的操作
p->pnext=pnew(相当于NULL=pnew)就为非法操作!另外你的 creat_list函数可以简化一下:
PDIAN creat_list()
{
PDIAN phead=(PDIAN)malloc(sizeof(DIAN));
if(phead==NULL)
{
printf("分配内存失败,程序关闭!\n");
exit(-1);
}
phead->pnext=NULL;
return phead;
}
指针中常见的错误就是指针的非法访问,越界访问等。在你进行指针操作时一定要确保指针是否有效!
额,
PDIAN creat_list()这个函数有问题,里面的phread只是形参,函数一结束就释放了。
在C中编译会出错 我认为
typedef struct Dian
{
int data;
struct Dian * pnext;
}DIAN,*PDIAN;
这里可以改下不要一次typedef成2个名字