#include <iostream>using namespace std;
template <class T>
class L
{
public:struct Link{T val;Link* next;};L():head(new Link),tail(new Link){head->val=0;tail->val=0;head->next=tail;tail->next=NULL;}void l_add(T val);void l_remove(T val);void l_sort();void l_show();L& operator[](int index);L&operator<<(T val);
private:Link * head;Link * tail;
};//增加
template <typename T>
void L<T>::l_add(T val)
{Link * Q=new Link;Q->val=val;Link * t=tail;for(int i=0;i<tail->val;i++){t=t->next;}Q->next=NULL;t->next=Q;tail->val++;
}
template <typename T>
L<T>& L<T>::operator<<(T val)
{l_add(val);return *this;
}
//删
template <typename T>
void L<T>::l_remove(T val)
{Link* t=tail;while(t->next!=NULL){if(t->next->val==val){Link* q;q=t->next;t->next=q->next;delete q;tail->val--;}t=t->next;}}
//修改
template <typename T>
L<T>& L<T>::operator[](int index)
{Link* t=tail;for(int i=0;i<index;i++){t=t->next;}t->val=666;
}
//排序
template <typename T>
void L<T>::l_sort()
{Link * t;int i,j;for(i=1;i<tail->val;i++){for(t=tail->next;t->next!=NULL;t=t->next){if(t->val>t->next->val){j=t->val;t->val=t->next->val;t->next->val=j;}}}
}
//展示
template <typename T>
void L<T>::l_show()
{Link *t=tail;for(int i=0;i<tail->val;i++){t=t->next;cout<<t->val<<" ";}cout<<endl;
}
int main()
{L<int> l1;l1<<5<<6<<8<<4<<3;l1.l_show();
// l1.l_add(5);
// l1.l_add(6);
// l1.l_add(7);
// l1.l_add(2);
// l1.l_add(7);
// l1.l_add(9);
// l1.l_add(1);
// l1.l_show();
// l1.l_remove(6);
// l1.l_show();
// l1.l_sort();
// l1.l_show();
// l1.operator[](5);
// l1.l_show();return 0;
}