说明:这个链表是不带头结点的
方法1:就地逆置,需要三个指针,分别指向连续的三个节点,p2指向当前位置,p1指向前一个结点,p3指向后一个节点,每一次循坏让p2的pNext指向p1,,然后p1,p2,p3分别向后指一个节点,直到p3和p2都指向了空
图解如下:
代码实现:
ListNode* Reverse(ListNode* pHead)
{
assert(pHead);
ListNode* p1 = NULL;
ListNode* p2 = pHead;
ListNode* p3 = pHead->pNext;
while (p2 != NULL)
{
p2->pNext = p1;
p1 = p2;
p2 = p3;
if (p3 != NULL)
{
p3 = p3->pNext;
}
}
return p1;
}
方法2:重新开辟空间,将原链表每次尾删一个节点,然后尾插到新链表中,或者用头删头插,最后返回新链表
ListNode* Reverse(ListNode* pHead)
{
ListNode* pNewNode=pHead;
DataType data;
while(pHead!=NULL)
{
data=pHead->data;
popFront(&pHead);
pushFront(&pNewNode,data);
}
return pNewNode;
}