//use iterative
void ReverseLinkedList(Node* head)
{
if(head == NULL)
return;
Node* current, *pre, *next;
current = head;
pre = next = NULL;
while(NULL != current)
{
next = current->next;
current->nxet = pre;
pre = current;
current = current->next;
}
head = pre;
}
//use recursion
void ReverseLinkedList(Node* head)
{
if(head == NULL)
return;
Node* p = head;
if(p->next == NULL)
{
head = p;
return;
}
ReverseLinkedList(p->next);
p->next->nxet = p;
p->next = NULL;
}
//use stack
void ReverseLinkedList(Node* head)
{
if(head == NULL)
return;
stack <Node*> s;
Node* tmp = head;
while(NULL != tmp)
{
s.push(tmp);
tmp = tmp->next;
}
Node* p = s.top();
s.pop();
head = p;
while(!s.empty())
{
p->next = s.top();
s.pop();
p = p->next;
}
p->next = NULL;
}