#include "LinkList.cpp"
方法一:新建一个头结点L3,每次插入都判断是否为空
void Merge(LinkNode *L1,LinkNode *L2,LinkNode *&L3){
//初始化L3
InitList(L3);
LinkNode *p=L1->next,*q=L2->next,*r=L3,*s;
while(p != NULL || q != NULL){
if(p != NULL){
s=p;
p=s->next;
s->next = r->next;
r->next = s;
r=r->next;
}
if(q != NULL){
s=q;
q=s->next;
s->next = r->next;
r->next = s;
r=r->next;
}
}
}
方法二:在原节点L1上建L3,将最小表插完后,剩余节点直接接在L3后
void Merge01(LinkNode *L1,LinkNode *L2,LinkNode *&L3){
LinkNode *p=L1->next,*q=L2->next,*r;
L3=L1;
r=L3;
free(L2);
while(p!=NULL&&q!=NULL){ //插入最小长度后
r->next=p;r=p;p=p->next;
r->next=q;r=q;q=q->next;
}
// r->next=NULL;
if(q!=NULL) //将剩余节点一次性插到L3后
p=q;
r->next = p;
}
int main(){
LinkNode *L1,*L2,*L3;
int a[]={1,2,3,4,5,6};
int b[]={1,2,3,4};
ListInsertR(L1,a,6);
ListInsertR(L2,b,4);
DispList(L1); //打印输出
DispList(L2); //打印输出
Merge(L1,L2,L3);
DispList(L3);
DestoryList(L1); //释放单链表
DestoryList(L2); //释放单链表
DestoryList(L3); //释放单链表
}