方法1:递归,双指针
定义两个指针: pre 和 cur ;pre 在前 cur 在后。
每次让 pre 的 next指向 cur,实现一次局部反转
局部反转完成之后,pre 和 cur 同时往前移动一个位置 (cur先移,pre后移)
循环上述过程,直至 pre 到达链表尾部
class Solution {
public:
ListNode* reverseList(ListNode* head) {
ListNode * cur = NULL;
ListNode * pre = head;
while(pre!=NULL)
{
ListNode * temp = pre->next;
pre->next = cur;
cur = pre;
pre = temp;
}
return cur;
}
};
方法2:递归
详细题解:【反转链表】:双指针,递归,妖魔化的双指针 - 反转链表 - 力扣(LeetCode)



