从头到尾遍历原链表,每遍历一个结点,将其摘下放在新链表的最前端。注意链表为空和只有一个结点的情况。时间复杂度为O(n)。参考代码如下:
#include <cstdio>
//链表反转
ListNode *list_invert(ListNode *phead)
{
if(phead == NULL)
return NULL;
ListNode *ptemp1 = phead->next;//你先走
ListNode *ptemp2 = phead;//我殿后
ListNode *newHead = phead;
ptemp2->next = NULL;
while(ptemp1 != NULL)
{
ptemp2 = ptemp1;
ptemp1= ptemp1->next;
ptemp2->next = newHead;
newHead = ptemp2;
}
return newHead;
}