#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;
}