[ 剑指offer ] 面试题6:从尾到头打印链表

题目描述


 输入一个链表,从尾到头打印链表每个节点的值。

 

解题思路 


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 里面的这种写法

 
分类: Q & A
posted @ 2020-02-11 22:47  remly  阅读(86)  评论(0编辑  收藏  举报