使用递归的链表反向打印的意外结果

Posted

技术标签:

【中文标题】使用递归的链表反向打印的意外结果【英文标题】:Unexpected result in linked list reverse print using recursion 【发布时间】:2020-01-22 10:32:45 【问题描述】:

我使用递归以相反的顺序打印链表。我在玩代码并在递归调用上方添加了另一个打印语句,并希望它以原始顺序打印链接列表,但它只打印列表的第一个元素。我的链表有以下数据

0 --> 1 --> 2 --> 3 --> 4 --> 5 --> 6 --> 

链表类-

class node_obj:
def __init__(self, d):
    self.data = d
    self.next = None

我的递归函数-

def recursive_revers1(head):
if head != None:
    print('--------', head.data)
    recursive_rev(head.next)
    print(head.data)

recursive_revers1(head)

输出:

-------- 0
6
5
4
3
2
1
0

链表被正确反转,但为什么第一个打印语句只工作?我希望它以原始顺序打印整个列表。

【问题讨论】:

【参考方案1】:

您在递归中调用了错误的函数:recursive_rev(可能是代码的早期版本),但您的递归函数现在称为 recursive_revers1。这对我有用:

def recursive_revers1(head):
    if head: # recommended way to ask if something is not None
        print('--------', head.data)
        recursive_revers1(head.next) # here was the mistake
        print(head.data)

recursive_revers1(head)

现在在控制台中我们得到:

-------- 0
-------- 1
-------- 2
-------- 3
-------- 4
-------- 5
-------- 6
6
5
4
3
2
1
0

【讨论】:

非常感谢。我尝试了不同的函数,但忘记更改函数内部的名称。

以上是关于使用递归的链表反向打印的意外结果的主要内容,如果未能解决你的问题,请参考以下文章

C++怎么利用递归实现单线链表的反向输出??

从头到尾打印链表(剑指offer_6)

链表的天然递归结构性质

06 从尾到头打印新链表

递归地反转Java中的链表

寒假 9(max subsequence sum二分递归算法实现并debug,表的链表实现概念过程整理)