Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
206. 反转链表 – 力扣(LeetCode) (leetcode-cn.com)
给你单链表的头节点 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
二、思路分析:
首先我们先考虑 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