206. 反转链表
给你单链表的头节点 head
,请你反转链表,并返回反转后的链表。
示例 1:
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
输入:head = [1,2]
输出:[2,1]
示例 3:
输入:head = []
输出:[]
提示:
链表中节点的数目范围是 [0, 5000]
-5000 <= Node.val <= 5000
有些小伙伴可能在初次接触LeetCode的时候对于代码的return会产生疑问,比如下题明明题目说的是返回一个链表,但是代码却返回的是一个节点,其实:LeetCode不用自己输出的,你只要返回正确的头节点就可以了,系统会自己去判断
但凡涉及到链表的题目,一定要在纸上把过程先画出来,再写程序,因为有的时候这种操作比较抽象,画出来就比较直观
方法一:双指针
- 首先定义两个指针,pre和cur,其中pre在cur之后
- 然后让pre的next指向cur,实现一个局部的反转
- 然后两个指针同时往后移动一个单位的距离
- 直到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=NULL,*pre=head;