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

 

解题思路 


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] 

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

 

总结


 1.理解递归函数写在 return 里面的这种写法

 
Q & A

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

 

解题思路 


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] 

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

 

总结


 1.理解递归函数写在 return 里面的这种写法

相关文章:

  • 2022-03-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-02
  • 2021-06-17
  • 2021-09-09
猜你喜欢
  • 2021-05-22
  • 2021-10-29
  • 2022-12-23
  • 2021-10-10
  • 2022-12-23
  • 2021-11-20
相关资源
相似解决方案