template<class T>
class List {
private:
template<class T>
struct Node {
Node() : next(NULL)
{
}
T value;
Node* next;
};
public:
List() : root(NULL) current(NULL)
{
}
~List()
{
Node<T>* node root;
while(node ! NULL) {
Node<T>* temp node->next;
delete node;
node temp;
}
}
void Add(T value)
{
if(current ! NULL) {
current->next new Node<T>;
current->next->value value;
current current->next;
}
else {
root new Node<T>;
root->value value;
current root;
}
}
void Reverse()
{
Node<T> *node1 NULL *node2 NULL *node3 NULL;
node1 root;
if(node1 ! NULL) {
node2 node1->next;
}
if(node2 ! NULL) {
node3 node2->next;
}
while(node1 ! NULL && node2 ! NULL) {
node2->next node1;
node1 node2;
node2 node3;
if(node3 ! NULL) {
node3 node3->next;
}
}
if(root ! NULL) {
root->next NULL;
}
current root;
root node1;
}
void Print() const
{
Node<T>* next root;
while(next ! NULL) {
cout << next->value << endl;
next next->next;
}
}
private:
Node<T>* root;
Node<T>* current;
};