![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1b1373ea6e2541234b4a4b9e09d9ee8c.png)
分析
使用双指针
- 第一个指针(cur当前节点)指向头节点,第二个指针(pre当前节点前一个节点)指向nullpter(第一个节点反转后即为最后一个节点,最后一个节点next指向nullpter。这里不知道当前链表的最后一个节点)
- 将cur的下一个节点保存在一个临时节点中
- 将cur的下一个指向pre(前一个节点)
- 将pre指向cur(随时保存pre为cur前一个节点)
- 将cur指向cur的下一个节点(即临时节点)
- 在cur为空时结束循环
代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur = head,*pre = nullptr;
//在cur为空时结束循环
while (cur)
{
//将cur的下一个节点保存在一个临时节点中
ListNode* temp = cur->next;
//将cur的下一个指向pre(前一个节点)
cur->next = pre;
//将pre指向cur
pre = cur;
//将cur指向cur的下一个节点
cur = temp;
}
return pre;
}
};