题目描述
输入一个链表,反转链表后,输出新链表的表头。
分析:
ListNode* next=NULL;//用来保存待反转的第一个节点(pHead 和 next节点)
ListNode* pre=NULL;//用来保存已经反转的第一个结点
next=pHead->next;/首先记录当前节点的下一个节点,(保存起来)
//先用next保存pHead的下一个节点的信息,保证单链表不会因为失去pHead节点的原next节点而就此断裂
pHead->next=pre;//让当前节点指向前一个节点,因为要反转
//保存完next,就可以让pHead从指向next变成指向pre了
pre=pHead;//让前一个节点值,取代当前的节点值。因为要继续向下走
//pHead指向pre后,就继续依次反转下一个节点
pHead=next;//让下一个节点,取代当前节点
//让pre,pHead,next依次向后移动一个节点,继续下一次的指针反转
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead) {
ListNode* pre=NULL;
ListNode* next=NULL;
while(pHead!=NULL){
next=pHead->next;
pHead->next=pre;
pre=pHead;
pHead=next;
}
return pre;
}
};