前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode —— 206. 反转链表

LeetCode —— 206. 反转链表

作者头像
Regan Yue
发布2023-07-10 14:43:19
1510
发布2023-07-10 14:43:19
举报
文章被收录于专栏:ReganYue's BlogReganYue's Blog

LeetCode —— 206. 反转链表

一、题目描述:

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

image-20221002094126250
image-20221002094126250

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

image-20221002094144940
image-20221002094144940

输入:head = [1,2] 输出:[2,1] 示例 3: 输入:head = [] 输出:[] 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 进阶:链表可以选用迭代或递归方式完成反转。你能否用两种方法解决这道题? 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/reverse-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

这道题考察了什么思想?你的思路是什么?

我的第一思路很简单,从链表头开始,把第一节点和第二节点倒转,然后保留第二节点的位置,继续将第二节点和第三节点进行倒转,直到最后一个节点完成倒转,然后返回链表头即可。

做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

但是我的思路存在问题,就是我的原头节点还是指向第二个节点,这就导致节点遍历时会陷入无尽的深渊,直到永远。。。

于是经过思考,我们需要保留前置节点,而初始前置节点为nil,这就导致原头节点会指向为nil的前置节点,这样最终也不会出现死循环。

需要注意反转操作过程中不能丢失节点数据!

有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

image-20221002104929549
image-20221002104929549
代码语言:javascript
复制
func reverseList(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    newHead := reverseList(head.Next)
    head.Next.Next = head
    head.Next = nil
    return newHead
}

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/reverse-linked-list/solution/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

三、AC 代码:

代码语言:javascript
复制
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func reverseList(head *ListNode) *ListNode {
    var prev *ListNode
    curr := head

    for curr != nil {
        next := curr.Next
        curr.Next = prev
        prev = curr
        curr = next
    }
    return prev
}
image-20221002104948580
image-20221002104948580
image-20221002105005194
image-20221002105005194

四、总结:

迭代方法时间复杂度为O(n),空间复杂度为O(1),而递归方法空间复杂度和时间复杂度都为o(n)。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-06-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LeetCode —— 206. 反转链表
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档