我正在编写一个名为 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()
请您参考如下方法:
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)
举个例子链表:1->2->3 遍历代码,函数 ReversePrint 被赋予指向链表头部的链接,即 1。我们看到头部不等于 null,因此我们转到代码的第二行,这是第一次递归调用到 head.next,它是 2。我们再次看到这个新的“head”不等于 null,所以我们进行第二次递归调用,这次传递包含 3 的节点。我们看到这个新的“head”是不等于 null,所以我们对 head.next 进行第三次递归调用,在本例中为 null。所以我们返回,因为我们达到了基本情况。我们现在回到第二次递归调用,我们移至递归调用之后的代码行,即 print 语句。我们打印 3。因为这个递归调用现在已经完成,我们回到第一个递归调用,并打印 2。最后,我们回到我们最初的函数调用,我们打印 1。因此,成功地反向打印我们的链表命令。
