(本博客旨在个人总结回顾)
题目描述:
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
解题思路:
通过三个指针分别指向连续的三个链表结点,并改变指向,依次遍历完链表。
测试例子:
①5个结点链表
②1个结点的链表
③没有结点的链表
目标函数:
/*
* @name ReverseList
* @brief 反转链表
* @param [in] ListNode * pHead
* @return ListNode* 反转后的链表头结点
*/
ListNode* ReverseList(ListNode* pHead)
{
if (NULL == pHead)
{
return NULL;
}
if (NULL == pHead->m_pNext)
{
return pHead;
}
ListNode* pReverseHead = NULL;
ListNode* pPre = NULL;
ListNode* pNode = pHead;
ListNode* pNext = NULL;
while (pNode != NULL)
{
pNext = pNode->m_pNext;
pNode->m_pNext = pPre;
if (NULL == pNext)
{
pReverseHead = pNode;
}
pPre = pNode;
pNode = pNext;
}
return pReverseHead;
}