剑指Offer Day 2

118 阅读1分钟

1、从尾到头打印链表

法一:辅助栈法
链表从前向后访问节点,依次添加到栈里,再倒序返回;

class Solution:
    def reversePrint(self, head):
        list1=[]
        while head:
            list1.append(head.val)
            head=head.next
        return list1[::-1]`

时间复杂度:O(N),入栈和出栈操作;
空间复杂度:O(N),辅助栈使用O(N)的额外时间;

法二:递归法
递推阶段:先访问至末尾的节点None返回空列表;
回溯阶段:依次添加当前的节点对应值(倒序添加),即可倒序输出;

class Solution:
    def reversePrint(self, head):
        if head:
            return self.reversePrint(head.next) + [head.val]
        else:
            return []

再精简一点用三目运算符去书写return语句

class Solution:
    def reversePrint(self, head):
            return self.reversePrint(head.next) + [head.val] if head else []

时间复杂度:O(N),访问链表各个节点;
空间复杂度:O(N),递归的最大深度;