您的位置:首页 > 其它

合并两个链表,两个表的元素交叉进行,合并之后合并后的链表变成空表

2017-10-19 19:19 344 查看
//编写方法meld,合并之后的两个表变成空表

template<typename T>

void chain<T>::meld(chain<T>& a, chain<T>& b)

{
chainNode<T>*pa = a.firstNode;
chainNode<T>*pb = b.firstNode;
int aS = a.size();
int bS = b.size();
firstNode = new chainNode<T>(pa->element);                           //先把a的首位元素赋给完成合并的表
chainNode<T>*targetNode = firstNode;
chainNode<T>*deleteNode;
deleteNode = pa;
pa = pa->next;
a.firstNode = pa;                           
++listSize;
delete deleteNode;
if (aS <= bS)                                                                                //有两种情况,a的长度小于等于b的长度,还有大于的情况
{
while (pa!=NULL)                                                              //先把a的所有元素放在表的偶数位,奇数位是b的元素
{
targetNode->next = new chainNode<T>(pb->element);
deleteNode = pb;
targetNode = targetNode->next;
pb = pb->next;
b.firstNode = pb;
++listSize;
delete deleteNode;
targetNode->next = new chainNode<T>(pa->element);
deleteNode = pa;
targetNode = targetNode->next;
pa = pa->next;
a.firstNode = pa;
++listSize;
delete deleteNode;
}
while (pb!=NULL)                                                           //把b的剩余元素赋给完成合并的表
{
targetNode->next = new chainNode<T>(pb->element);
deleteNode = pb;
targetNode = targetNode->next;
pb = pb->next;
b.firstNode = pb;
delete deleteNode;
++listSize;
}
targetNode->next = NULL;
}
else                                                                                        //a的长度大于b的情况
{
while (pb != NULL)
{
targetNode->next = new chainNode<T>(pb->element);
deleteNode = pb;
targetNode = targetNode->next;
pb = pb->next;
b.firstNode = pb;
++listSize;
delete deleteNode;
targetNode->next = new chainNode<T>(pa->element);
<
9446
/span>deleteNode = pa;
targetNode = targetNode->next;
pa = pa->next;
a.firstNode = pa;
++listSize;
delete deleteNode;
}
while (pa != NULL)
{
targetNode->next = new chainNode<T>(pa->element);
deleteNode = pa;
targetNode = targetNode->next;
pa = pa->next;
a.firstNode = pa;
delete deleteNode;
++listSize;
}
targetNode->next = pa;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐