三指针解法,思路来自b站up主@香辣鸡排蛋包饭
视频:LeetCode力扣刷题 | 剑指Offer 24. 反转链表_哔哩哔哩_bilibili
-----------------------------------------------------------------------------------------------------------
题目描述:定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。
/**
* 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 *pre=NULL; //pre指针:指向当前结点的前置结点
ListNode *cur=head; //cur指针:指向当前结点
ListNode *temp; //temp指针:暂存当前结点的后继结点,这里先不要初始化
while(cur!=NULL)
{
temp=cur->next; //循环内部先进行temp的更新,这样不需要temp=temp->next
cur->next=pre; //反转当前结点的指向
pre=cur; //反转完毕后,更新pre结点
cur=temp; //更新cur结点(temp结点的更新不要放最后!)
}
return pre; //由于此时cur的值为空,返回pre结点作为新链表的头结点
}
};