题目描述
输入一个链表,反转链表后,输出新链表的表头。
示例1
输入
{1,2,3}
返回值
{3,2,1}
/*
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 *p=pHead; //工作指针,记录原链表的当前头节点
ListNode *r=NULL; //记录原链表当前头节点的下一个节点,防止原链表断链
while(p!=NULL)
{
r=p->next; //先把原链表头节点的下一个节点记录下来,防止断链
p->next=pre; //将原链表的当前头节点的指针指向反转链表的头节点
pre=p; //更新反转链表的当前头节点,相当于对反转链表进行头插法建链
p=r; //更新原链表的头节点,顺序往后移动一个
}
return pre;
}
};