假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
//L1和L2都是带头结点的递增单链表,本算法返回合并后且是递减的单链表
LinkList MergeList(LinkList &L1,LinkList &L2)
{
LNode *p1 = L1->next;
L1->next = NULL; //选择L1作为结果链表的头指针,先将结果链表初始化为空
LNode *p2 = L2->next;
LNode *temp; //用于临时存储后继结点
while(p1!=NULL && p2!=NULL)
{
//用头插法将较小的结点插入L1
if(p1->data < p2->data)
{
temp= p1->next;
p1->next = L1->next;
L1->next = p1;
p1 = temp;
}
else
{
temp = p2->next;
p2->next = L1->next;
L1->next = p2;
p2 = temp;
}
}
if(p1!=NULL) //结束上面操作之后,一般来说,L1和L2会剩下一个链表不为空
p2 = p1;
while(p2!=NULL)
{
temp = p2->next;
p2->next = L1->next;
L1->next = p2;
p2 = temp;
}
free(L2);
return L1;
}