//创建头结点,并在头结点后倒序插入
//不需要使用附加指针
void creatList(LinkList &L,int n)
{
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
for(int i=1;i<=n;++i){
p=(LinkList)malloc(sizeof(LNode));
scanf(&p->data);
p->next=L->next;
L->next=p;
}
}
//有序单链表的合并
//破坏式的合并
//表尾插入
void Merge(LinkList &La,LinkList &Lb,LinkList &Lc)
{
LinkList pa=La->next;
LinkList pb=Lb->next;
LinkList pc=Lc;
for(!pa&&!pb){
if(pa->data<=pb->data){
La->next=pa->next;
pc->next=pa;
pa->next=NULL;
pc=pa;
pa=La->next;
}
else{
Lb->next=pb->next;
pc->next=pb;
pb->next=NULL;
pc=pb;
pb=Lb->next;
}
}
if(!pa){
pc->next=pb;
Lb->next=NULL;
}
else{
pc->next=pa;
La->next=NULL;
}
}
//充分利用子链表的资源
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc)
{
LinkList pa=La->next;
LinkList pb=Lb->next;
LinkList pc=Lc=La;//使用La的头结点
while(pa&&pb){
if(pa->data<=pb->data){
pc->next=pa;
pc=pa;
pa-=pa->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
pc->next=pa?pa:pb;
free(Lb);
}