反转单链表(数据结构基础)

277 阅读1分钟

单链表是一种很基础的数据结构,在很多应用情况下都需要将其反转,反转即把链表“倒置”,头变成尾,尾变成头。那么如何反转呢?这里笔者提供一种方法来实现单链表的反转。 说明:以下以不带头节点的单链表为示例。即头指针指向的就是第一个节点(带头节点即第一个节点为一种标识节点头指针也指向这里,第二个节点才是真正的“第一个节点”,即头指针下一个节点)

  1. 头插法:将旧链表的头节点摘下作为新链表头节点,旧链表后移,继续取头节点进行头插操作,直到最后一个节点做完头插。
    

    代码如下:

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