1.问题描述
定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。
结构体类型:
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
2.分析
- 注意链表为空
- 如果链表就一个节点,那么就返回头结点
- 如果链表有多个节点,那么需要更多考虑
a->b->...->h->i->j->...
a<-b<-..-<h -<i j->...
我们比较容易导致链表断裂,找不到下一个节点,所以我们每次修改一个n节点的m_pNext
之前,需要保存下n+1节点,否则就找不到下一个节点了。
3.源码
ListNode* ReverseList(ListNode* pHead)
{
if(pHead == nullptr)
return nullptr;
ListNode* pReversHead = pHead;
ListNode* pNext = pHead->m_pNext;
pReversHead->m_pNext = nullptr;
while(pNext != nullptr)
{
ListNode* pNode = pNext;
pNext = pNext->m_pNext;
pNode->m_pNext = pReversHead;
pReversHead = pNode;
}
return pReversHead;
}