题目描述
输入一个链表,从尾到头打印链表每个节点的值。
解题思路
1.借助额外的空间
略...
2.递归
class Solution: def printListFromTailToHead(self, listNode): # write code here if listNode == None: return [] return self.printListFromTailToHead(listNode.next) + [listNode.val]
这个递归应该如何理解呢?
我们借助debug来观察堆栈理解
观察堆栈,每次执行完方法都会保存当前的栈帧,然后前往下一层,直到 listNode is None
查看 CALL STACK,里面自下而上保存了6个栈帧( printListFromTailToHead() ),最后一个即是达到递归出口条件的栈帧(即listNode is None)
这时候开始回溯
栈帧6:return []
栈帧5:return [] + [1]
栈帧4:return [] + [2] + [1]
栈帧3:return [] + [3] + [2] + [1]
栈帧2:return [] + [4] + [3] + [2] + [1]
栈帧1:return [] + [5] + [4] + [3] + [2] + [1]
最后回到栈帧module,得到 ret = [5,4,3,2,1]
总结
1.理解递归函数写在 return 里面的这种写法