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

    你可能感兴趣的文章
    POJ 1113 Wall(计算几何--凸包的周长)
    查看>>
    poj 1125Stockbroker Grapevine(最短路)
    查看>>
    Qualitor processVariavel.php 未授权命令注入漏洞复现(CVE-2023-47253)
    查看>>
    poj 1151 (未完成) 扫描线 线段树 离散化
    查看>>
    POJ 1151 / HDU 1542 Atlantis 线段树求矩形面积并
    查看>>
    poj 1163 数塔
    查看>>
    POJ 1177 Picture(线段树:扫描线求轮廓周长)
    查看>>
    Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)
    查看>>
    POJ 1182 食物链(并查集拆点)
    查看>>
    POJ 1185 炮兵阵地 (状态压缩DP)
    查看>>
    POJ 1195 Mobile phones
    查看>>
    POJ 1228 Grandpa's Estate (稳定凸包)
    查看>>
    poj 1236(强连通分量分解模板题)
    查看>>
    poj 1258 Agri-Net
    查看>>
    quagga 和 zebos
    查看>>
    poj 1286 Necklace of Beads
    查看>>
    POJ 1321 棋盘问题
    查看>>
    poj 1321(回溯)
    查看>>
    Qt高级——Qt元对象系统源码解析
    查看>>
    qt调用vs2008编写的dll动态库(隐式调用)
    查看>>