LinkList mergeLinkedlist(LinkList &L1,LinkList &L2)
{
LinkList a=NULL;
LinkList b=NULL;
LinkList c=NULL;
LinkList L;
GreatList(L);
a=L1->next; //a指向L1的节点
b=L2->next; //b指向L2的节点
c=L; //c指向L的节点
/*
*如果L1链表为空,L2链表不为空,直接返回L2的首地址
*/
if(a==NULL&&b!=NULL)
{
L->next = L2->next;
return L;
}
/*
*如果L2链表为空,L1链表不为空,直接返回L1的首地址
*/
else if(b==NULL&&a!=NULL)
{
L->next = L->next;
return L;
}
/*
*如果两条链都为空,直接返回一个空指针
*/
else if(a==NULL&&b==NULL)
{
L->next = NULL;
return L;
}
/*
*否则L1与L2逐一比较,找到值较小的元素,插入到L中
*/
else
{
while(a!=NULL&&b!=NULL)
{
/*
*第一种情况:a指针所指的元素小于与b指针所指向的元素
*/
if(a->data<b->data)
{
c->next = a;
a = a->next;
c = c->next;
}
/*
*第二种情况:a指针所指的元素大于与b指针所指向的元素
*/
else if(a->data>b->data)
{
c->next = b;
b = b->next;
c = c->next;
}
/*
*第三种情况:a指针所指的元素等于与b指针所指向的元素
*/
else
{
c->next = a;
a = a->next;
b = b->next;
c = c->next;
}
}
if (a!=NULL) //如果a指向的单链表没有插入完,则把剩余的插入到L的后面
{
c->next = a;
}
if (b!=NULL)//如果b指向的单链表没有插入完,则把剩余的插入到L的后面
{
c->next = b;
}
return L;
}
}