边看边写(链表反转(递归跟非递归))
边看边写(链表反转(递归和非递归))
非递归算法:《剑指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; }