Skip to main content
 首页 » 编程设计

python之一种在python中以反向/向后顺序打印链表的方法

2025年05月04日10davidwang456

我正在编写一个名为 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。因此,成功地反向打印我们的链表命令。