定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。链表节点定义如下:
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
思路:额,一路遍历下去,前后指向反过来,最后一个节点就输出。O(n)的效率也应该是最优的了。
答案如下:
ListNode* ReverseList(ListNode* pHead)
{
ListNode* pReversedHead=nullptr;
ListNode* pNode=pHead;
ListNode* pPrev=nullptr;
while(pNode!=nullptr)
{
ListNode* pNext=pNode->m_pNext;
if(pNext==nullptr)
pReversedHead=pNode;
pNode->m_pNext=pPrev;
pPrev=pNode;
pNode=pNext;
}
return pReversedHead;
}
心得:如果出现断裂的情况,就应该加一个指针提前记录。