我正在编写一个名为LList的类,并在该类中定义了几个方法。我在编写一种以反向顺序打印链表的方法时遇到问题。
class Node(object):
def __init__(self, data=None, nextNode=None):
self.data = data
self.nextNode = nextNode
class LList(object):
def __init__(self, head=None):
self.head = head
self.size = 0
def insert(self, node):
if not self.head:
self.head = node
self.size += 1
else:
# set new nodes pointer to old head
node.nextNode = self.head
# reset head to new node
self.head = node
self.size +=1
def getSize(self):
return self.size
def printLL(self):
mynode = self.head
c = 0
while mynode:
c += 1
print(mynode.data, c)
mynode = mynode.nextNode
#a method for class that prints list backwards.
def reverse(self):
#main program
MyList = LList()
MyList.insert(Node("NJ"))
MyList.insert(Node("NR"))
MyList.insert(Node("OH"))
# Use my print method
MyList.printLL()
#print in reverse
MyList.reverse()
Run Code Online (Sandbox Code Playgroud)
小智 5
class Node(object):
def __init__(self, data=None, next_node=None):
self.data = data
self.next = next_node
def ReversePrint(head):
if head == None:
return
else:
ReversePrint(head.next)
print(head.data)
Run Code Online (Sandbox Code Playgroud)
让我们以链接列表为例:1-> 2-> 3遍历代码,为ReversePrint函数提供了指向链接列表的开头(即1)的链接。我们看到head不等于null,因此我们进行移动到代码的第二行,这是对head.next的第一次递归调用,即2。再次,我们看到这个新的“ head”不等于null,因此我们进行了第二次递归调用,这一次传递了包含3的节点。我们看到这个新的“ head”不等于null,因此我们对head.next进行了第三次递归调用,在这种情况下为null。所以我们返回,因为我们击中了基本情况。现在返回第二个递归调用,然后移至递归调用之后的代码行,即print语句。我们打印3。由于此递归调用现已完成,