非递归算法:《剑指offer》面试题16的解法:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
ListNode* Reverse(ListNode *pHead)
{
ListNode* pReverseHead =NULL;
ListNode* pNode=pHead;
ListNode* pPrev = NULL;
while(pNode!=NULL)
{
ListNode *pNext = pNode->m_pNext;
if(pNext!=NULL)
pReverseHead=pNode;
pNode->m_pNext = pPrev;
pPrev = pNode;
pNode = pNext;
}
return pReverseHead;
}
递归算法(思考改为递归)
void ReverseSolution(ListNode *pHead,ListNode** pReverse)
{
if(pHead==NULL)
return;
ListNode *pNode = pHead->m_pNext;
pHead->m_pNext =*pReverse;
*pReverse=pHead;
pHead =pNode;
ReverseSolution(pHead,pReverse);
//ReverseSolution
}
int main()
{
ListNode node1;
ListNode node2;
ListNode node3;
node1.m_nKey=1;
node1.m_pNext=&node2;
node2.m_nKey=2;
node2.m_pNext=&node3;
node3.m_nKey=3;
node3.m_pNext=NULL;
ListNode *pHead=&node1;
ListNode *pReverse=NULL;
ReverseSolution(pHead,&pReverse);
return 0;
}