本算法没有利用L1,L2链表的结点,而是通过复制方式新建L3的所有结点,这样没有破坏原有的L1 和L2单链表。
本算法的实质就是尾插法建立单链表
思路:
1.让两个指针p.q 先指向两个单链表的首结点。并定义尾指针r,和s
2.建立L3的头结点,并将r指向L3的尾结点
3.通过while循环判断
3.1如果p->data < q->data,则复制p结点得到s结点,然后将s结点链接到 L3的末尾
3.2 如果p->data > q->data,则复制q结点得到s结点,然后将s结点链接到 L3的末尾
4.无论p或q,我们统一用p来处理
5.最后将其中没有遍历的表余下的结点复制到L3中
6.尾结点next域置空
C代码实现:
void Merge(LinkList * L1,LinkList * L2,LinkList *&L3){
LinkList * p = L1->next,*q = L2->next,*r,*s;
L3 = (LinkList *)malloc(sizeof(LinkList));
r = L3;
while(p != null && q != null){
if(p->data > q->data){
s = (LinkList *)malloc(sizeof(LinkList));
s->data = p->data;
p = p->next;
r->next = s;
r = s;
}else{
s = (LinkList *)malloc(sizeof(LinkList));
s->data = q->data;
q = q->next;
r->next = s;
r = s;
}
if(q != null) p = q;
while(q != null){
s = (LinkList *)malloc(sizeof(LinkList));
s->data = p->data;
p = p->next;
r->next = s;
r = s;
}
r->next = null;
}
}