leetcode206【easy 超级经典 面试常客 Java】反转链表

后面的链表题中也会出现“反转链表”思想的使用 所以这个题一定要非常熟练奥!
只要掌握了 维护pre指针和cur指针(下面有图)的技巧 这题就迎刃而解了!
206. 反转链表

又是一道三刷的题啊

可以看出 链表问题是相当高频的哦!

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。

示例 1:

请添加图片描述

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]

示例 2:

请添加图片描述

输入:head = [1,2]
输出:[2,1]

示例 3:

输入:head = []
输出:[]

解题思路与代码

leetbook上给的思路让我遍历链表 然后将当前节点的下一个节点扔到最前面去(我尝试了一下 没搞出来。。超时了 这里留个坑 回头来填

对链表的操作还是不熟悉!!

双指针迭代链表

利用双指针很好解决!

之前我写过这题的题解 可以参考下

(下面还没看懂的 这里面有图解的说 感谢王尼玛提供的题解~)

在这里插入图片描述

这个思路也是普适性最强的!

既然要我们把链表翻转过来 就让链表每个节点的指向都换个方向咯!

【1】定义两个指针 一前一后 每次让后面的指针指向前面的 实现局部的反转

ListNode prev = null;//在前面的指针
ListNode curr = head;//在后面的指针 要让它指向prev实现局部反转

【2】每次迭代过程都要预存一下后面那个指针对应节点的下一个节点 为了达到“前后两个节点在反转后 前后两个指针向下挪 继续进行局部反转的工作”

ListNode next = curr.next;//存储下curr的下一个位置~
Java代码
class Solution {
    public ListNode reverseList(ListNode head) {
        ListNode prev = null;//在前面的指针
        ListNode curr = head;//在后面的指针 要让它指向prev实现局部反转
        while(curr != null){
            ListNode next = curr.next;//存储下curr的下一个位置~
            curr.next = prev;
            //至此 局部反转完成 接下来分别完成两个指针的后移
            prev = curr;
            curr = next;
        }
        return prev;
    }
}

递归法

借鉴了评论区里一位大佬的代码

写得真的很好!

class Solution {
    public ListNode reverseList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        // 想象递归已经层层返回,到了最后一步
        // 以链表 1->2->3->4->5 为例,现在链表变成了 5->4->3->2->null,1->2->null(是一个链表,不是两个链表)
        // 此时 newHead是5,head是1
        ListNode newHead = reverseList(head.next);
        // 最后的操作是把链表 1->2->null 变成 2->1->null
        // head是1,head.next是2,head.next.next = head 就是2指向1,此时链表为 2->1->2
        head.next.next = head;
        // 防止链表循环,1指向null,此时链表为 2->1->null,整个链表为 5->4->3->2->1->null
        head.next = null;
        return newHead;
    }
}

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值