单链表的逆置分为两种方法:头插法和就地逆置法。
(1)头插法:
算法思路:依次取原链表中的每一个节点,将其作为第一个节点插入到新链表中,指针用来指向当前节点,p为空时结束。
(2)就地逆置法:
ListNode* ReverseList(ListNode* pHead)
{
if (pHead == NULL || pHead->pNext == NULL)
{
retrun pHead;
}
ListNode* pRev = NULL;
ListNode* pCur = pHead;
while(pCur != NULL)
{
ListNode* pTemp = pCur; // 步骤①
pCur = pCur->pNext; // 步骤②
pTemp->pNext = pRev; // 步骤③
pRev = pTemp;
}
return pRev;
}
下面我们来用图解的方法具体介绍整个代码的实现流程:
初始状态:
第一次循环:
第一次循环过后,步骤①:pTemp指向Head,步