206. 反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
示例 1:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jbIQj0Gj-1649660102547)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220411135219036.png)]](https://i-blog.csdnimg.cn/blog_migrate/28a53fe65e75840a34c2b8b35d72307f.png)
输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
示例 2:
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WzkAKQhR-1649660102549)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220411135235436.png)]](https://i-blog.csdnimg.cn/blog_migrate/ffac2c208fd1a43761920088162c629c.png)
输入: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;
while(pre!=NULL){
<
LeetCode链表反转:双指针与递归解析

本文介绍了如何使用双指针和递归两种方法解决LeetCode中的206题——反转链表。通过示例和详细步骤解析了每种方法的思路,强调了链表反转过程中需要注意的细节,包括头节点的处理和防止环的产生。
最低0.47元/天 解锁文章
1873

被折叠的 条评论
为什么被折叠?



