剑指Offer(三):从尾到头打印链表

本文详细介绍了三种不同的方法实现链表元素的倒序输出:直接插入后反转列表、初始即逆序插入以及递归遍历。分别讨论了它们的执行效率和内存消耗,并比较了不同实现的优缺点。对于链表操作和列表反转的优化策略进行了深入的探讨。
摘要由CSDN通过智能技术生成

①将链表中的val从后往前一个个插入进列表中

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        array = []
        while head:
            array.insert(0, head.val)
            head = head.next
        return array

        执行用时:56 ms, 在所有 Python3 提交中击败了28.61%的用户

        内存消耗:16.3 MB, 在所有 Python3 提交中击败了70.13%的用户

        通过测试用例:24 / 24

②先直接插入,然后再通过列表的reverse()方法,来实现列表的反转

        24 / 24 个通过测试用例

        状态:通过

        执行用时: 32 ms

        内存消耗: 16.2 MB

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        array = []
        while head:
            array.append(head.val)
            head = head.next
        array.reverse()
        return array

也有看到不用reverse()函数的方法,最后输出array[::-1]

-------------讨论和题解的方法:

③使用递归的方法:先走至链表末端,回溯时依次将节点值加入列表 ,这样就可以实现链表值的倒序输出。

class Solution:
    def reversePrint(self, head: ListNode) -> List[int]:
        if head is None:
            return []
        return self.reversePrint(head.next) + [head.val]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值