要求:创建两个无头结点的单链表,头指针分别为ha,hb,链中有数据data和指针域next,两个链表的数据都按照不递减存放,现在要求将hb归并到ha表中,归并后要求ha依然递增有效,归并中的ha表中的元素如果hb表中也有,则该元素不再重复归并到ha中,hb在算法中不能被破坏。
#include<iostream>
using namespace std;
struct node
{
int data;
node* next;
};
node *ha,*hb;
int main()
{
int n,m;
cin>>n;
node *pa,*pb,*pre,*r;
ha=(node*)malloc(sizeof(node));
ha->next=NULL;
pa=ha;
while(n--)
{
pb=(node*)malloc(sizeof(node));
cin>>pb->data;
pa->next=pb;
pa=pb;
pa->next=NULL;
}
cin>>m;
hb=(node*)malloc(sizeof(node));
hb->next=NULL;
pb=hb;
while(m--)
{
pa=(node*)malloc(sizeof(node));
cin>>pa->data;
pb->next=pa;
pb=pa;
pb->next=NULL;
}
r=hb;
hb=hb->next;
free(r);
pre=ha;
pa=ha->next;
pb=hb;
while(pa&&pb)
{
if(pa->data<pb->data)
{
pre=pa;
pa=pa->next;
}
else if(pa->data==pb->data)
{
pb=pb->next;
}
else {
node *x;
x=(node*)malloc(sizeof(node));
x->data=pb->data;
pre->next=x;
pre=x;
pre->next=pa;
pb=pb->next;
}
}
if(pb)
{
node* x;
x=(node*)malloc(sizeof(node));
x->data=pb->data;
pa=x;
pa->next=NULL;
pre->next=pa;
pb=pb->next;
}
while(pb)
{
if(pb->data==pa->data)
pb=pb->next;
else if(pb->data>pa->data)
{
node *x;
x=(node*)malloc(sizeof(node));
x->data=pb->data;
pa->next=x;
pa=x;
pa->next=NULL;
pb=pb->next;
}
}
r=ha;
ha=ha->next;
free(r);
while(ha)
{
cout<<ha->data<<" ";
ha=ha->next;
}
cout<<endl;
system("pause");
return 0;
}