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
;
}