python剑指 Offer 06. 从尾到头打印链表

这篇博客介绍了如何使用栈和递归两种方法实现链表的反向打印,给出了详细的解题思路和代码实现。解法一利用栈进行迭代,解法二运用递归,两者的时间和空间复杂度均为O(n)。通过这两種方法,你可以更好地理解和应用Python的切片以及递归技巧。
摘要由CSDN通过智能技术生成

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。

 

示例 1:

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

限制:

0 <= 链表长度 <= 10000

 解法一:

栈。创建一个新的列表,然后从尾到头遍历。时间和空间复杂度都是O(n)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

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

 解法二:

递归法。每次都返回后一个的反向打印函数加当前的值。时间和空间复杂度都是O(n)

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

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

通过这道题目我学到的:
1.python切片方法

seq[start:end:step]

2.递归法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值