博客
关于我
剑指 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/

    你可能感兴趣的文章
    Oracle 表
    查看>>
    Oracle 递归
    查看>>
    oracle 逻辑优化,提升高度,综合SQL上下文进行逻辑优化
    查看>>
    oracle 闪回关闭,关闭闪回即disable flashback的操作步骤
    查看>>
    oracle 限制用户并行,insert /*parallel */ 到不同用户,并行起不来的问题
    查看>>
    oracle--用户,权限,角色的管理
    查看>>
    oracle00205报错,Oracle控制文件损坏报错场景
    查看>>
    Oracle10g EM乱码之快速解决
    查看>>
    Oracle10g下载地址--多平台下的32位和64位
    查看>>
    Oracle10g安装了11g的ODAC后,PL/SQL连接提示TNS:无法解析指定的连接标识符
    查看>>
    oracle11g dataguard物理备库搭建(关闭主库cp数据文件到备库)
    查看>>
    Oracle11G基本操作
    查看>>
    Oracle11g服务详细介绍及哪些服务是必须开启的?
    查看>>
    Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统
    查看>>
    oracle12安装软件后安装数据库,然后需要自己配置监听
    查看>>
    Oracle——08PL/SQL简介,基本程序结构和语句
    查看>>
    Oracle——distinct的用法
    查看>>
    Oracle、MySQL、SQL Server架构大对比
    查看>>
    oracle下的OVER(PARTITION BY)函数介绍
    查看>>
    Oracle中DATE数据相减问题
    查看>>