#include
<iostream>
#include <stdio.h>
using namespace std;
template<typename T>
struct Node
{
Node ( T value ) : mValue(value),mNext(0)
{
}
Node *mNext;
T mValue;
};
template<typename T>
Node<T> *recursiveReverse( Node<T> *currentNode )
{
if (currentNode->mNext == NULL)
{
return currentNode;
}
else
{
Node<T>* tmp = recursiveReverse<T>(currentNode->mNext);
currentNode->mNext->mNext = currentNode;
currentNode->mNext =NULL;
return tmp;
}
}
template<typename T>
Node<T> *
noneRecursive( Node<T> * root )
{
if ( 0 == root )
{
return 0;
}
Node<T> * retval = 0;
while ( root )
{
Node<T> *nextNode = root->mNext;
root->mNext = retval;
retval = root;
root = nextNode;
}
return retval ;
}
template<typename T>
void dump(Node<T> *head)
{
while ( head )
{
cout << head->mValue<<" ";
head = head->mNext;
}
cout << endl;
}
int main(int, char *[])
{
Node<int> *head = new Node<int>(0);
Node<int> *currentNode = head;
for ( int i = 1 ; i < 10 ; i ++ )
{
Node<int> *tmp = new Node<int>(i);
currentNode->mNext = tmp;
currentNode = tmp;
}
Node<int> *result = recursiveReverse<int>(head);
dump(result);
head = noneRecursive<int>(result);
dump(head);
return 0;
}