//编写方法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);
chainNode<T>*targetNode = firstNode;
chainNode<T>*deleteNode;
deleteNode = pa;
pa = pa->next;
a.firstNode = pa;
++listSize;
delete deleteNode;
if (aS <= bS)
{
while (pa!=NULL)
{
b.firstNode = pb;
targetNode->next = new chainNode<T>(pb->element);
deleteNode = pb;
targetNode = targetNode->next;
delete deleteNode;
pb = pb->next;
b.firstNode = pb;
++listSize;
deleteNode = pa;
targetNode->next = new chainNode<T>(pa->element);
targetNode = targetNode->next;
targetNode->next = new chainNode<T>(pb->element);
pa = pa->next;
a.firstNode = pa;
++listSize;
delete deleteNode;
}
deleteNode = pb;
++listSize;
targetNode = targetNode->next;
pb = pb->next;
delete deleteNode;
++listSize;
targetNode->next = pa;
delete deleteNode;
deleteNode = pa;
++listSize;
targetNode->next = new chainNode<T>(pb->element);
while (pb!=NULL)
{
deleteNode = pb;
b.firstNode = pb;
targetNode = targetNode->next;
pb = pb->next;
delete deleteNode;
delete deleteNode;
++listSize;
}
targetNode->next = pb;
deleteNode = pb;
++listSize;
}
else
{
deleteNode = pb;
while (pb != NULL)
{
targetNode->next = new chainNode<T>(pb->element);
delete deleteNode;
targetNode = targetNode->next;
pb = pb->next;
b.firstNode = pb;
delete deleteNode;
targetNode->next = new chainNode<T>(pa->element);
deleteNode = pa;
targetNode = targetNode->next;
pa = pa->next;
targetNode->next = pb;
a.firstNode = pa;
++listSize;
delete deleteNode;
}
deleteNode = pb;
targetNode->next = new chainNode<T>(pa->element);
delete deleteNode;
++listSize;
while (pa != NULL)
{
deleteNode = pa;
++listSize;
targetNode = targetNode->next;
pa = pa->next;
a.firstNode = pa;
delete deleteNode;
}
}
targetNode->next = pa;
deleteNode = pa;
++listSize;
}