博客
关于我
剑指 Offer 06. 从尾到头打印链表-Python题解
阅读量:498 次
发布时间:2019-03-07

本文共 1143 字,大约阅读时间需要 3 分钟。

反转链表并提取节点值是一个常见的链表操作问题。以下是一个基于代码示例的详细解释和优化版本:

问题描述

给定一个单链表的头节点,要求从尾部到头部反转链表,并返回每个节点的值作为一个数组。

示例

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

代码逻辑解释

代码采用了递归的方法来实现链表的反转。具体步骤如下:

  • 定义基础情况:如果链表为空(即头节点为 None),则返回一个空数组。

  • 递归调用:调用自身方法,从链表的下一个节点开始递归处理。

  • 逐步构建结果数组:每次递归返回后,将当前节点的值添加到结果数组的末尾。

  • 代码优化措施

    • 去掉不必要的空格和格式字符:确保代码格式简洁,不影响可读性。
    • 避免使用复杂结构:使用简单的逻辑表达,避免采用过于复杂的数据结构或语法。

    逐步代码解释

    class ListNode:    def __init__(self, x):        self.val = x        self.next = Noneclass Solution:    def reversePrint(self, head: ListNode) -> List[int]:        res = self.getValue(head)        return res    def getValue(self, head: ListNode) -> List[int]:        if head is None:            return []        else:            res = self.getValue(head.next)  # 递归处理下一个节点            res.append(head.val)  # 将当前节点的值添加到结果数组最后            return res

    工作流程举例

    假设初始链表为:1 -> 3 -> 2 -> None

    • 递归第一个调用:getValue(1)
      • 调用 getValue(3)
        • 调用 getValue(2)
          • 调用 getValue(None): 返回空数组 []
          • res = [],append(2): 返回 [2]
        • res = [2], append(3): 返回 [2,3]
      • res = [2,3], append(1): 返回 [2,3,1]

    最终输出结果为 [2,3,1],与题目要求一致。

    代码性能分析

    该算法的时间复杂度为 O(n),因为我们只需要遍历链表一次。在最坏情况下(链表长度为 10000),该算法仍能高效运行。

    这种递归方法虽然简洁,但在极端情况下可能会导致栈溢出。可以通过迭代的方式来优化代码,但递归实现更直观且易于理解。

    转载地址:http://fggcz.baihongyu.com/

    你可能感兴趣的文章
    OpenCV读写avi、mpeg文件
    查看>>
    opencv里用calcCovarMatrix计算协方差矩阵
    查看>>
    OpenCV错误:在setSize中断言失败(s&>;=0)-尝试将图像放置在网络摄像头提要上时
    查看>>
    opencv面向对象设计初探
    查看>>
    OpenCV(1)读写图像
    查看>>
    OpenCV:不规则形状区域中每种颜色的像素数?
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    OpenDaylight融合OpenStack架构分析
    查看>>
    OpenERP ORM 对象方法列表
    查看>>
    openEuler Summit 2022 成功举行,开启全场景创新新时代
    查看>>
    openEuler 正式开放:推动计算多样化时代的到来
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_踩坑_安装以后系统无法联网_启动ens33网卡---国产瀚高数据库工作笔记002
    查看>>
    OpenFeign 入门与实战
    查看>>
    OpenFeign源码学习
    查看>>
    OpenFeign组件声明式服务调用
    查看>>
    openfeign远程调用不起作用解决_使用Spring Boot的spring.factories进行注入---SpringCloud Alibaba_若依微服务框架改造---工作笔记007
    查看>>
    openfire开发(四)消息拦截器
    查看>>
    openfire源码解读之将cache和session对象移入redis以提升性能
    查看>>
    Openfire身份认证绕过漏洞复现+利用(CVE-2023-32315)
    查看>>