双指针
步骤很重要!!!(每次都记不清然后思路乱了
1、定义一个pre指针指向null,一个cur指针指向head
2、定义一个临时指针变量temp指向cur->next(因为下一步要改变cur->next
3、反转,将cur->next 指向pre
4、完成反转后将cur指针和pre指针都向后移(先移动pre,另pre=cur,cur指向一开始temp保存的节点
5、最后return pre是因为反转链表完成后pre指向头节点
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode* cur=head;//后一个指针
ListNode* pre=NULL;//前一个指针
ListNode* temp;//定义一个临时指针存储cur的下一个节点
while(cur){
temp=cur->next;//保存cur的下一个节点
cur->next=pre;//将cur反向
pre=cur;//移向下一个节点
cur=temp;
}
return pre;
}
};