- 反转链表,给一头结点,输出反转链表后的头结点
注意如果需要修改头指针,用指针的指针,不需要的话就无所谓
用三个指针,修改连接指针指向,
ListNode* ReverseList(ListNode* pHead)//自写
{
if (pHead == nullptr) return nullptr;//习惯动作
else if (pHead->m_pNext == nullptr) return pHead;
ListNode* pPreNode = nullptr;
ListNode* pCurrNode = pHead;
ListNode* pNextNode = nullptr;
while (pCurrNode!=nullptr)
{
pNextNode = pCurrNode->m_pNext;//画个图看看
pCurrNode->m_pNext = pPreNode;
pPreNode = pCurrNode;
pCurrNode = pNextNode;
}
return pPreNode;
递归法
ListNode* RecurseNode(ListNode* pPreNode,ListNode* pCurrNode)//自写,递归
{
ListNode* pNextNode = pCurrNode->m_pNext;
pCurrNode->m_pNext = pPreNode;
if (pNextNode == nullptr)
return pCurrNode;
else
return RecurseNode(pCurrNode, pNextNode);
}
ListNode* ReverseList(ListNode* pHead)//自写,递归
{
if (pHead == nullptr) return nullptr;//习惯动作
else if (pHead->m_pNext == nullptr) return pHead;
return RecurseNode(nullptr, pHead);
}