我正在学习Python中的数据结构,我遇到了code,我不明白。 我有一个节点类
class Node():
def __init__(self, data=None, next=None):
self.data = data
self.next = next
和linkedlist类
class LinkedList():
def __init__(self):
self.head = Node()
...
...
def reversePrint(self, node=None):
if node == None:
node = self.head
if node.next:
self.reversePrint(node.next)
print(node.data)
方法追加,删除和查找都很好
但我似乎无法理解这个方法reverse_print
如何以相反的顺序呈现链表节点,我希望只打印最后一个节点数据而不是整个链表节点。
这是我的code
答案 0 :(得分:1)
魔术发生在以下两行:
if node.next:
self.reversePrint(node.next)
如果节点有后继节点,它将再次调用相同的方法,一直到列表末尾。然后它将展开调用堆栈,并以相反的顺序打印每个节点中的数据(因为在递归调用print(node.data)
之后出现reversePrint
)。如果你切换print
语句和递归调用它将按正向顺序打印它,这更容易掌握。
答案 1 :(得分:1)
假设您的链接列表是
Node A: data="alpha"
Node B: data="beta"
Node C: data="gamma"
您致电ll.reversePrint()
,node
设置为head
,即节点A.
reversePrint
检查下一个节点(节点B),并调用reversePrint
,传入节点B.
-> reversePrint
,检查下一个节点(节点C),并调用reversePrint
,传入节点C.
-> -> reversePrint
检查下一个节点(没有一个节点)。
-> -> reversePrint
打印节点的数据:"gamma"
。
-> reversePrint
打印节点的数据:"beta"
。
reversePrint
打印节点的数据:"alpha"
。
箭头表示递归的深度。