回复 6楼 TonyDeng
void union_lc(List *la,List *lb,List *lc)
{
int temp;
List *p,*s,*p1,*p2;
// lc=(List *)malloc(sizeof(List)); //在这申请lc的头节点在主函数中不能改变
lc->next=NULL;
p=lc; //而对lc,la,lb这三个链表的操作却是在子函数,就是这很迷糊,为什么申请头结点后才能传参呢,而不是直接传过去对其操作,这对这三个链表的操作都改变了链表中的数据,但为何申请头结点这个操作就不行了呢?是c本身的传参问题吗?
p1=la->next;
p2=lb->next;
while(p1->next!=NULL&&p2->next!=NULL)
{
if(p1->datadata)
{
s=(List *)malloc(sizeof(List));
s->data=p1->data;
s->next=NULL;
p->next=s;
p=s;
p1=p1->next;
}
else
{
s=(List*)malloc(sizeof(List));
s->data=p2->data;
s->next=NULL;
p->next=s;
p=s;
p2=p2->next;
}
}
while(p1!=NULL)
{
s=(List*)malloc(sizeof(List));
s->data=p1->data;
s->next=NULL;
p->next=s;
p=s;
p1=p1->next;
}
while(p2!=NULL)
{
s=(List*)malloc(sizeof(List));
s->data=p2->data;
s->next=NULL;
p->next=s;
p=s;
p2=p2->next;
}
}
void display(List *lc)
{
List *p;
p=lc->next;
while(p!=NULL)
{
printf("%8d",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
List *la,*lb,*lc;
la=(List *)malloc(sizeof(List)); //这三句实在主函数中的
lb=(List *)malloc(sizeof(List));
lc=(List *)malloc(sizeof(List)); //为什么非要把这个放到这,放到上述位置就错了,返回到主函数时,lc没有被改变
printf("This is la.\n");
inist_list(la);
printf("This is lb.\n");
inist_list(lb);
union_lc(la,lb,lc);
display(lc);
List *p,*q;
q=la;
p=la->next;
while(p!=NULL)
{
free(q);
q=p;
p=p->next;
}
q=lb;
p=lb->next;
while(p!=NULL)
{
free(q);
q=p;
p=p->next;
}
q=lc;
p=lc->next;
while(p!=NULL)
{
free(q);
q=p;
p=p->next;
}
p=NULL;
q=NULL;
return 0;
}
菜鸟一名,准备起飞