两个排好序莲表,合并.

#include <iostream>
using namespace std;
typedef int T;

class List{
 struct Node{
 T data;
 Node* next;
 Node(const T& d=T()):data(d),next(NULL){}
 };
 Node* head;
 T len;
 Node*& getnop(int pos){
  if (pos>size()||pos<0)
  {
   pos=0;
  }
  if (pos==0)
  {
   return head;
  }
  Node* p=head;
  while (--pos>0)
  {
   p=p->next;
  }
  return p->next;

 }
 public:
  List():len(0),head(NULL){}
  int size()const{return len;}
  void travel(){
   Node* p=head;
   while (p!=NULL)
   {
    cout<<p->data<<" ";
    p=p->next;
   }
   cout<<endl;
  }
  void insert(const int& d,int pos=0){
   Node*& n=getnop(pos);
   Node* p=new Node(d);
  
   p->next=n;
   n=p;

   len++;
  }

  void sort(){//排序
   Node* p=head;
   Node* cur=NULL;
   int m=0;
   while (1)
   {
    while(p->next!=NULL)
    {
    cur=p->next;
    if (p->data>cur->data)
    {
     int t=p->data;
     p->data=cur->data;
     cur->data=t;
     m=1;
    }
    p=p->next;}

    if (m==0)
    {
     break;
    }
    if (m==1)
    {
     m=0;
     p=head;
    }
    
   }

  }
  void heb(List& t2){
  Node* p2=t2.head;
  int m=0;
  while (1)
  {
   Node*& p=getnop(size()-1);
   if (p->data>p2->data)
   {
    int t=p->data;
    p->data=p2->data;
    p2->data=t;
    m=1;
   }
   sort();t2.sort();
   if (m==0)
   {
    break;
   }
   if (m==1)
   {
    m=0;
   }
  }
  Node*& n=getnop(size()-1);
  n->next=p2;

  }
};

int main(int argc, char* argv[])
{
 cout<<"????????????"<<endl;
 List l;
 List m;
 l.insert(3);
 l.insert(5);l.insert(45);l.insert(35);l.insert(44);
 l.travel();
 l.sort();

 m.insert(42);m.insert(23);m.insert(43);m.insert(13);
 m.travel();
 m.sort();
 l.travel();
 m.travel();
 cout<<"-----合并两莲表------"<<endl;
 l.heb(m);
 l.travel();
 return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值