双向链表类中增添的相关函数如下:
void merge(DuList &La, DuList &Lb) {
init();
DuLNode *pa = La.first(), *pb = Lb.first();
DuLNode *pc = head;
while (pa->prior != La.last() && pb->prior != Lb.last())
if (pa->data <= pb->data) {
pc->next = pa;
pa->prior = pc;
pc = pa;
pa = pa->next;
} else {
pc->next = pb;
pb->prior = pc;
pc = pb;
pb = pb->next;
}
if (pa->prior != La.last()) {
pc->next = pa;
pa->prior = pc;
DuLNode *pd = La.last();
pd->next = tail;
tail->prior = pd;
} else {
pc->next = pb;
pb->prior = pc;
DuLNode *pd = Lb.last();
pd->next = tail;
tail->prior = pd;
}
_size = La.size() + Lb.size();
La.init();
Lb.init();
}
双向链表定义文件中的主函数修改如下:
int main() {
DuList La, Lb, Lc;
create_DuList(La);
create_DuList(Lb);
cout << "双向链表La为:\n";
print_DuList(La);
cout << "双向链表Lb为:\n";
print_DuList(Lb);
Lc.merge(La, Lb);
cout << "双向链表La和Lb合并后的双向链表Lc为:\n";
print_DuList(Lc);
return 0;
}