// 方法一, 递归实现
ListNode* ReverseList(ListNode* pHead)
{
return ReverseListRecursive(NULL,pHead);
}
// 返回反转后的头结点
ListNode* ReverseListRecursive(ListNode* pPrev, ListNode* pNode)
{
// 空链表
if (pNode == NULL)
{
return NULL;
}
// pNode为原链表的尾节点
if (pNode->m_pNext == NULL)
{
pNode->m_pNext = pPrev;
return pNode;
}
ListNode* pNext = pNode->m_pNext;
pNode->m_pNext = pPrev;
return ReverseListRecursive(pNode, pNext);
}
// 方法二,循环实现
ListNode* ReverseList(ListNode* pHead)
{
ListNode* pReversedHead = NULL;
ListNode* pNode = pHead;
ListNode* pPrev = NULL;
while(pNode != NULL)
{
ListNode* pNext = pNode->m_pNext;
if(pNext == NULL)
pReversedHead = pNode;
pNode->m_pNext = pPrev;
pPrev = pNode;
pNode = pNext;
}
return pReversedHead;
}
以上两种方法参考了《剑指offer》作者的实现方式,特此注明!
阅读(521) | 评论(0) | 转发(0) |