1、题目描述:
输入一个链表,反转链表后,输出新链表的表头。
2、解题思路
以v为当前结点,更改v->next指向u后,v->next不再指向w,所以在此之前要用一个结点pNext来保存w;同时也需要一个结点来保存当前结点的前一个结点,记为pPrev;反转链表后需要一个头结点来返回,记为pReverseHead,如果当前结点的下一个结点为NULL,则当前结点就是反转链表的头结点。
3、代码
/*struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode *pNode=pHead;//当前结点
ListNode *pReverseHead=NULL; //反转链表的头结点
ListNode *pPrev=NULL; //当前结点的前一结点
while(pNode!=NULL)
{
ListNode *pNext=pNode->next;
if(pNext==NULL) //如果当前结点的下一个结点为空,则将该结点作为反转后链表的头结点
{
pReverseHead=pNode;
}
pNode->next=pPrev;
pPrev=pNode;
pNode=pNext;
}
return pReverseHead;
}
};