1.无序
list prio(list a,list b)
{
int m=0,n=0;
node*p=a.first;
node*q=b.first;
while(p)
{
m++;
p=p->next;
}
while(q)
{
n++;
q=q->next;
}
if(m>=n)
{
p=a.first;
q=b.first;
while(q)
{
node*p1=p->next;
node*q1=q->next;
p->next=q;
q->next=p1;
p=p1;
q=q1;
}
}
else
{
q=a.first;
p=b.first;
while(q)
{
node*p1=p->next;
node*q1=q->next;
p->next=q;
q->next=p1;
p=p1;
q=q1;
}
a.first=b.first;
}
return a;
}
2.有序
void MergeList_L(LinkList La,LinkList Lb,LinkList &Lc,Status(*compare)(ElemType,ElemType))
{
//已知单链现形表La和Lb中的数据元素按值非递减排列
//归并La和Lb得到的新的线形表Lc,Lc的数据元素也按值非递减排列
LNode *pa,*pb,*pc;
pa=La->next;
pb=Lb->next;
//Lc=pc=La;//用La的头结点作为Lc的头结点
InitList_L( Lc ); //creat the header for Lc.
pc = Lc;
while(pa&&pb)
{
pc->next = ( LNode* )malloc( sizeof( LNode ) );
if((*compare)(pa->data,pb->data))
{
memcpy( pc->next, pa, sizeof( LNode ) );
pc=pc->next;pa=pa->next;
}
else
{
memcpy( pc->next, pb, sizeof( LNode ) );
pc=pc->next;pb=pb->next;
}
}
pc->next=pa?pa:pb;//插入剩余段
}