这里只介绍一种方法吧。
①先新建一个新的首指针newHead,使其指向NULL,(作为新链表)反转后的链表。
②新建指针cur,nex。前者指向当前节点,后者用来保存后一个节点。否则当前指针插入新链表之后无法找到原链表中的下一个节点,(当前节点的下一个指针已经指向空,而不是原链表中的下一个节点)。
③然后将当前节点使用头插法插入新链表当中,再将cur,nex后移一个节点,循环上述步骤,直至cur指向为空。
代码如下:
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) { //这里的pHead是首指针,指向首节点
if(pHead==NULL)//链表为空,无需反转
return pHead;
ListNode*newHead=NULL;
ListNode*cur=pHead;//首指针
ListNode*nex=NULL;
while(cur!=NULL)
{
nex=cur->next;
cur->next=newHead;
newHead=cur;
nex=cur;//cur=cur->next;
}
return newHead;//返回新链表的首结点
}
};