#include<iostream> using namespace std; template<class T> struct Unit { public: Unit * next; T value; }; template<class T> class MyLink { public: class LinkIterator { private: Unit<T> * init; public: LinkIterator(Unit<T> * init) { this->init=init; } bool operator !=(LinkIterator& it) { return this->init!=it.init; } void operator ++(int) { this->init=init->next; } Unit<T> operator *() { return *init; } }; private: Unit<T> *head; Unit<T> *prev; Unit<T> *hail; public: MyLink() { head=prev=hail=NULL; } void Add(T value) { Unit<T>* unit=new Unit<T>(); unit->value=value; unit->next=NULL; if(NULL==head) { head=prev=unit; } else { prev->next=unit; prev=unit; } hail=unit->next; } Unit<T> *Begin() { return head; } Unit<T> *End() { return hail; } virtual ~MyLink() { prev=head; Unit<T>* next; while(NULL!=prev) { next=prev->next; delete prev; prev=next; } } }; template<class T> ostream& operator<< (ostream& os, const Unit<T>& s) //全局重载操作符 { os<<s.value; return os; } template<class T> void display (T begin, T end) { for(T mid=begin;mid!=end; mid ++) cout<<*mid<<" "; cout<<endl; } int main() { MyLink<int> ml; for(int i=0;i<5;i++) ml.Add(i+1); MyLink<int>:: LinkIterator start=ml.Begin(); MyLink<int>:: LinkIterator end=ml.End(); display(start,end); return 0; }