还是这帖,还是我发的又有了新的问题,为什么同样的算法在函数内部正确,将多个函数放在一起就错了呢?到底是什么问题?麻烦大家看看,谢啦!
#include<iostream>using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
void createlist_L(LNode* *L,int n)
{
//逆序输入N个元素的值,建立带表头结点的单链表L
LNode *p;
int i;
(*L)=(LNode *)malloc(sizeof(LNode));
(*L)->next = NULL;//先建立一个带头结点的单链表
for(i=n;i>0;--i)
{
p=(LNode *)malloc(sizeof(LNode));//生成新结点
scanf("%d",&p->data);
p->next = (*L)->next;//插入到表头
(*L)->next = p;
}
}//creatlist L
void Mergelist_L(LNode *La,LNode *Lb){
//已知的单链表La和Lb的元素按值非递减排列
//归并La和Lb得到新的单链表Lc,Lc的元素也按值非递减排列。
LNode *pa,*pb,*Lc,*pc;
Lc=(LNode *)malloc(sizeof(LNode));
pc=Lc;
pa=La->next; pb=Lb->next;
while(pa && pb)
{
if(pa->data < pb->data)
{
pc->next=pa;
pa=pa->next;
pc=pc->next;
}
else if(pa->data > pb->data)
{
pc->next=pb;
pb=pb->next;
pc=pc->next;
}
else
{
pc->next=pa;
pa=pa->next;
pb=pb->next;
pc=pc->next;
}
}
while(pa)
{
pc->next=pa;
pa=pa->next;
pc=pc->next;
}
while(pb)
{
pc->next=pb;
pb=pb->next;
pc=pc->next;
}//将剩余段插入Lc中
while(Lc->next!=NULL)
{
Lc=Lc->next;
cout <<Lc->data << " ";
}
cout << endl;
}
void mix_L(LNode *La,LNode *Lb)
{
LNode *Lc,*pa,*pb,*pc;
Lc=(LNode *)malloc(sizeof(LNode));
pc=Lc;
pa=La->next;
pb=Lb->next;
while(pa && pb)
{
if(pa->data < pb->data)
{
pa=pa->next;
}
else if(pa->data > pb->data)
{ pb=pb->next;}
else
{
pc->next=pa;
pa=pa->next;
pb=pb->next;
pc=pc->next;
}
}
pc->next=NULL;
while(Lc->next!=NULL)
{
Lc=Lc->next;
cout <<Lc->data << " ";
}
cout << endl;
}
void differ_L(LNode *La,LNode *Lb)
{
LNode *pa,*pb,*pc,*Lc;
Lc=(LNode *)malloc(sizeof(LNode));
pc=Lc;
pa=La->next;
pb=Lb->next;
while(pa && pb)
{
if(pa->data < pb->data)
{
pc->next=pa;
pa=pa->next;
pc=pc->next;
}
else if(pa->data > pb->data)
{ pb=pb->next;}
else { pa=pa->next; pb=pb->next;}
}
while(pa)
{
pc->next=pa;
pa=pa->next;
pc=pc->next;
}
pc->next=NULL;
while(Lc->next!=NULL)
{
Lc=Lc->next;
cout <<Lc->data << " ";
}
cout << endl;
}
int main()
{
LNode *La,*Lb;
int a,b;
cout <<"请输入A链表中元素的数目"<<endl;
cin >> a;
cout <<"请按非递增顺序输入A链表中的元素"<<endl;
createlist_L(&La,a);
cout <<"请输入B链表中元素的数目"<<endl;
cin >> b;
cout <<"请按非递增顺序输入B链表中的元素"<<endl;
createlist_L(&Lb,b);
cout <<"AUB: ";
Mergelist_L(La,Lb);
cout <<"AnB: ";
mix_L(La,Lb);
cout <<"A-B: ";
differ_L(La,Lb);
system("pause");
return 0;
}