算法步骤:
(1)创建指针pa、pb,分别指向La、Lb的首元结点。Lc指向La的头结点,创建指针pc指向Lc。
(2)依次从La或Lb中获取两表中值较小的结点插入到Lc的表后,直至其中一个表变空为止
(3)继续将La或Lb其中一个表的剩余结点插入在Lc的表后
(4)释放Lb头结点
void MergeList_L(LinkList& La, LinkList& Lb, LinkList& Lc) { //有序表合并--用链表实现
Lnode* pa = La->next;
Lnode* pb = Lb->next;
Lnode* pc = Lc = La; //用La的头结点作为Lc的头结点
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; //插入剩余段
delete Lb; //释放Lb头结点
}
注:末尾的pc->next = pa ? pa : pb;是三目运算符形式的简化写法。
if(pa)
pc->next = pa;
else
pc->next = pb;
//可转化为
pc->next = pa ? pa : pb;