单链表是一种很基础的数据结构,在很多应用情况下都需要将其反转,反转即把链表“倒置”,头变成尾,尾变成头。那么如何反转呢?这里笔者提供一种方法来实现单链表的反转。 说明:以下以不带头节点的单链表为示例。即头指针指向的就是第一个节点(带头节点即第一个节点为一种标识节点头指针也指向这里,第二个节点才是真正的“第一个节点”,即头指针下一个节点)
-
头插法:将旧链表的头节点摘下作为新链表头节点,旧链表后移,继续取头节点进行头插操作,直到最后一个节点做完头插。代码如下:
void RecList(Node*&phead) {
Node* pnew = nullptr;
Node* ptemp = nullptr;
if (nullptr == phead || nullptr == phead->m_pNext) {
return;//链表为空或者只有一个节点返回
}
while (phead != nullptr)
{
ptemp = phead;
phead = phead->m_pNext;//头指针后移
ptemp->m_pNext = pnew;
pnew = ptemp;//更新头节点
}
phead = pnew;
}