The problem: Given a list with one direction link, return a list with all links reversed, i.e. with all elements linked in reversal order.
A typical implementation, where reversal starts from the beginning of the list, would look like this:
struct node {
int val;
node *_pnext;
};
node *ReverseList(node *p)
{
node *pLast=0, *pNext=0;
while(p!=0)
{
pNext = p->_pnext;
p->_pnext = pLast;
pLast = p;
p = pNext;
}
return pLast;
}
Here is a different implmentation, where the reversal starts from the end of the list, that can be implemented with recursive call:
node *RecurReverseList(node *p)
{
if (p==0) return p;
if(p->_pnext)
{
node *pR = RecurReverseList(p->_pnext);
(p->_pnext)->_pnext = p;
p->_pnext = 0;
return pR;
}
else
return p;
}