直接上代码啦。。。。。。。。。。。。。
#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;
}
运行结果: