直接上代码啦。。。。。。。。。。。。。
#include <iostream> using namespace std; template <class T> class List; template <class T> class ListIterator; template <class T> class Node { public: template <class T > friend class List; friend class ListIterator<T>; private: T data; Node *link; Node(T d) :data(d), link(0) {} }; template <class T> class List { friend class ListIterator<T>; public: List() { first = 0; } void Insert(T n); //插入元素 void Delete(T k); //删除元素 void Invert(); //链表翻转 void Concatenate(List * p); //连接两个链表 void Show(); private: Node<T> *first; }; template <class T> class ListIterator //链表迭代器 { public: ListIterator(List<T> &l) :list(l),curr(l.first) {} bool NotNull(); //判断当前是否为null bool NextNotNull();//判断下一个是否为null T *First(); //获取第一个元素 T* Next(); //获取下一个元素 private: const List<T> &list; Node<T> *curr; }; template <class T> void List<T>::Insert(T n) { Node<T> *p = new Node<T> (n); if (first == 0) first = p; else { p->link = first; first = p; } } template <class T> void List<T>::Delete(T k) { Node<T> *p = first, *pre = first; while (p) { if (p->data == k) { if (p == first) { if (first->link) first = first->link; else first = 0; delete p; } else { pre->link = p->link; delete p; } break; } pre = p; p = p->link; } } template<class T> void List<T>::Show() { Node<T> *p = first; while (p) { cout << p->data << " "; p = p->link; } cout << endl; } template <class T> void List<T>::Invert() { Node<T> *p = first, *q = 0; while (p) { Node<T> *r = q; q = p; p = p->link; q->link = r; cout << "invert" << endl; } first = q; } template <class T> void List<T>::Concatenate(List * p) { Node<T> *pp = first; Node<T> *pre = pp; while (pp) { pre = pp; pp = pp->link; } pre->link = p->first; } template<class T> bool ListIterator<T>::NotNull() { return curr != 0; } template <class T> bool ListIterator<T>::NextNotNull() { if ((curr != 0) && (curr->link != 0)) return true; return false; } template <class T> T* ListIterator<T>::First() { if (list.first) return &list.first->data; return 0; } template<class T> T* ListIterator<T>::Next() { if (curr) { curr = curr->link; return &curr->data; } return 0; } int main() { List<int> l; cout << "test Insert() Delete() Invert()" << endl; l.Insert(1); l.Insert(2); l.Insert(3); l.Insert(4); l.Delete(1); l.Show(); l.Invert(); l.Show(); cout << "Test Concatenate()" << endl; List<int> l2; l2.Insert(10); l2.Insert(11); l2.Insert(12); l2.Insert(13); l2.Insert(14); l.Concatenate(&l2); l.Show(); cout << "Test ListIterator()" << endl; ListIterator<int> li(l); int * it = li.First(); for (it; it != 0; it = li.Next()) cout << *it << " "; cout << endl; return 0; }运行结果: