一、题目
反转链表:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
二、解法
分析: 为了正确的反转一个链表,需要调整链表中指针的方向,如下图,我们在调整i的next指针时,除了需要知道节点i本身,还需要知道i的前一个节点h,因为我们需要把i的next指向节点h,同时,我们还需要先保存i的下一个节点j,以防止链表断开,因此,相应的我们需要定义3个指针,分别指向当前遍历到的节点,它的前一个节点以及后一个节点。
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;
}