题目描述
输入一个链表,反转链表后,输出新链表的表头。
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
/*
1.初始化三个指针,新链表表头指针,当前节点指针,前结点指针。
2.当前节点不为空进入循环,初始化下一节点指针,如果下一节点为空,当前节点赋值给新链表头指针
改变指针指方向,当前节点的指针指向前一个节点,当前节点指针和前结点指针向后移动继续循环。
3.循环结束返回新链表的表头。
*/
class Solution {
public:
ListNode* ReverseList(ListNode* pHead)
{
ListNode* reversedHead = nullptr; //反转后的链表头指针,初始化为空指针
ListNode* Cur = pHead; //当前指针,初始化为头指针
ListNode* Pre = nullptr; //当前指针的上一个节点的指针,初始化为空指针
while(Cur !=nullptr) //当前节点不为空,进入循环
{
ListNode* Next =Cur->next; //当前指针的下一个节点的指针,
if (Next == nullptr) //原链表最后一个节点时是新链表的表头
reversedHead = Cur; //新链表的表头是当前节点
Cur->next = Pre; //当前节点的指针指向前一个节点
Pre = Cur;·//pre指针向后走
Cur = Next; //cur指针向后走
}
return reversedHead; //返回新链表的表头
}
};