算法笔记 — 206. 反转链表

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

一、题目描述:

206. 反转链表 – 力扣(LeetCode) (leetcode-cn.com)

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

示例 1:

image.png

输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
复制代码

示例 2:

image.png

输入:head = [1,2]
输出:[2,1]
复制代码

示例 3:

输入:head = []
输出:[]
复制代码

 

提示:

  • 链表中节点的数目范围是 [0, 5000]
  • -5000 <= Node.val <= 5000

二、思路分析:

首先我们先考虑 reverseList 函数能做什么,它可以翻转一个链表,并返回新链表的头节点,也就是原链表的尾节点。所以我们可以先递归处理 reverseList(head.next),这样我们可以将以head.next为头节点的链表翻转,并得到原链表的尾节点newHead,此时head.next是新链表的尾节点,我们令它的next指针指向head,并将head.next指向空即可将整个链表翻转,且新链表的头节点是newHead。

三、AC 代码:

class Solution {
    public ListNode reverseList(ListNode head) {
        //返回待反转链表的最后一个节点
        if(head == null || head.next == null)
            return head;
        //找到待反转链表的最后一个节点
        ListNode newHead = reverseList(head.next);
        //对最后一个节点进行反转
        head.next.next = head;
        //最后一个节点的前继节点的next指向null
        head.next = null;
        //返回反转之后的新头节点
        return newHead;
    }
}
复制代码

四、总结:

**范文参考:

206. 反转链表 题解 – 力扣(LeetCode) (leetcode-cn.com)

简单易懂Java/C++ /Python/js/go 动画讲解 – 反转链表 – 反转链表 – 力扣(LeetCode) (leetcode-cn.com)

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享