在单链表中将两个链表合并,合并之后的链表使用的是输入链表的节点空间,合并之后输入链表变为空表

//编写方法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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值