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

    你可能感兴趣的文章
    Plotly:如何以 Root 样式绘制直方图,仅显示直方图的轮廓?
    查看>>
    Plotly:如何使用 Plotly Express 组合散点图和线图?
    查看>>
    Plotly:如何使用 plotly.graph_objects 和 plotly.express 定义图形中的颜色?
    查看>>
    Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?
    查看>>
    Plotly:如何使用 updatemenus 更新一个特定的跟踪?
    查看>>
    Plotly:如何使用长格式或宽格式的 pandas 数据框制作线图?
    查看>>
    Plotly:如何向烛台图添加交易量
    查看>>
    Plotly:如何在 plotly express 中找到趋势线的系数?
    查看>>
    Plotly:如何在桑基图中设置节点位置?
    查看>>
    Plotly:如何处理重叠的颜色条和图例?
    查看>>
    Plotly:如何手动设置 plotly express 散点图中点的颜色?
    查看>>
    Plotly:如何结合 make_subplots() 和 ff.create_distplot()?
    查看>>
    Plotly:如何绘制累积的“步骤“;直方图?
    查看>>
    Quartz进一步学习与使用
    查看>>
    Plotly条形图-根据正/负值更改颜色-python
    查看>>
    PLSQL developer12安装图解
    查看>>
    PLSQL Developer调试 存储过程和触发器
    查看>>
    PLSQL window操作
    查看>>
    plsql 存储过程 测试
    查看>>
    plsql 安装后database下拉没有东西
    查看>>