Data structures 链表-解释此代码的输出。答复:[1 2 3 4 3 2 1]

Data structures 链表-解释此代码的输出。答复:[1 2 3 4 3 2 1],data-structures,linked-list,Data Structures,Linked List,当下列链表的头节点作为输入传递时,下列函数的输出是什么? 1->2->3->4->5 def fun(head): if(head==None): return if head.get_next().get_next()!= None: print(head.get_data()," ", end='') fun(head.get_next()) print(head.get_data(),"

当下列链表的头节点作为输入传递时,下列函数的输出是什么? 1->2->3->4->5

def fun(head):
    if(head==None):
        return
    if head.get_next().get_next()!= None:
        print(head.get_data()," ", end='')
        fun(head.get_next())
    print(head.get_data()," ",end='')
假设头部。获取_next()-->移动到下一头部。
&head.get_data()-->获取当前head的数据。

您可以尝试写下每个步骤以了解输出。一定是

除非我在什么地方犯了错误

说明:

这里的每一步都代表一个新的框架

在步骤1、2、3中,第4行的条件为true,因此代码在第5行打印一个值并进行递归调用。 到目前为止,我们有1..2..3。。打印到控制台

但是,在步骤4中,条件为false。因为4是头,它的下一个元素是5,而5没有下一个元素。 现在请记住,正如我之前所说,这里的每一步都是一个新的堆栈帧。在步骤4中,我们在堆栈帧4中。若子句为false,则转到第7行。Head是4,所以我们将4打印到控制台并退出当前帧

现在我们回到第6行的第3帧。我们继续到第7行,头部是3,所以我们打印3并退出当前帧。依此类推,直到我们退出第1帧

那就是那些4..3..2..1。。他来自美国。它们印在第7行

每个步骤上的堆栈:

这不是你在stackoverflow上经常问的问题,目的是让人们帮助解决这个问题。你试过运行那个代码吗?如果是,并且您遇到问题-请更新问题。如果你不了解算法的某些内容,请相应地更新问题。我要求对此输出进行解释。我理解到1234,但无法理解最后的321请解释。我在答案中添加了解释。