以下是引用韭菜在2010-9-27 12:15:32的发言:
经过2楼提醒 修改如下 但是 能不能请教一下 为什么一定要malloc呢
#include
#include
struct node
{
int data;
node *link;
};
struct list
{
node *first,*last;
};
int show(list a);
int insert(list a,int num)
{
node *p=a.first;
while(p!=NULL) p=p->link;
node *m=(struct node *)malloc(sizeof(struct node));
m->data=num;
m->link=NULL;
if(a.first==NULL)
{
a.last=m;
a.first=m;
}
else
{
m->link=p->link;
if(p->link==NULL) a.last=m;
p->link=m;
}
show(a);
return 0;
}
int show(list a)
{
node *p=a.first;
while(p!=NULL)
{
printf("%d ",&p->data);
p=p->link;
};
return 0;
}
int main()
{
list a;
a.first=a.last=NULL;
for(int i=0;i<4;i++)
{
insert(a,i+1);
}
show(a);
return 0;
}
执行结果为: 1 2 3 4 Press any key to continue
这不是我要的结果啊
我要的是 1 1 2 1 2 3 1 2 3 4 不停的更新显示链表
求助
我不相信你这段代码可以输出你所说的结果,你用什么编译器简直太神奇了啊。
程序代码:
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *link;
};
struct list
{
struct node *first,*last;
};
int show(struct list a);
int insert( struct list* a,int num)//这儿是需要传指针的
{
struct node *p=a->first;
//while(p!=NULL) p=p->link;//这是干什么的?
struct node *m=(struct node *)malloc(sizeof(struct node));
m->data=num;
m->link=NULL;
if(a->first==NULL)
{
a->last=m;
a->first=m;
}
else//你原来写的要实现什么?
{
(a->last)->link=m;
a->last=m;
m->link=NULL;
}
show(*a);
return 0;
}
int show(list a)
{
struct node *p=a.first;
while(p!=NULL)
{
printf("%d",p->data);
p=p->link;
};
printf(" ");
return 0;
}
int main()
{
struct list a;
a.first=a.last=NULL;
for(int i=0;i<4;i++)
insert(&a,i+1);
system("pause");
return 0;
}
试试这个吧,可以实现你的要求
[
本帖最后由 青衣修罗 于 2010-9-27 13:15 编辑 ]