【问题标题】:single linked list reverse in pythonpython中的单链表反向
【发布时间】:2011-12-18 23:25:11
【问题描述】:

我正在尝试在 python 中创建一个简单的单链表。 (我知道没有必要在 python 中实现列表,但这不是重点)

这是我的代码:

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



class List:
    def __init__(self):
        self.firstNode = Node(None)

    def inserthead(self,newnode):
        if not self.firstNode.next:
            newnode.next = None
            self.firstNode.next = newnode
        else:
            newnode.next = self.firstNode.next
            self.firstNode.next= newnode


    def __show(self,start):
        if start.next:
            print start.data
            self.__show(start.next)

    def printlist(self):
        self.__show(self.firstNode)

    def __reverte_recursive(self,node):
        temp = None
        if not node.next: return node
        else:
            temp = self.__reverte_recursive(node.next)
            node.next.next= node
            node.next = None
        return temp

    def reverte_list1(self):
        self.firstNode=self.__reverte_recursive(self.firstNode)

    def __reverte_iterative(self,node):
        temp = None
        previous = None
        while node and node.next:
            temp = node.next
            node.next= previous
            previous = node
            node = temp
        return previous
    def reverte_iterative(self):
        self.firstNode=self.__reverte_iterative(self.firstNode)

nodeA = Node("A")
nodeB = Node("B")
nodeC = Node("C")
nodeD = Node("D")
nodeE = Node("E")


list1= List()

list1.inserthead(nodeA)
list1.inserthead(nodeB)
                           class Node:
    def __init__(self,data):
        self.data = data
        self.next= None



class List:
    def __init__(self):
        self.firstNode = Node(None)

    def inserthead(self,newnode):
        if not self.firstNode.next:
            newnode.next = None
            self.firstNode.next = newnode
        else:
            newnode.next = self.firstNode.next
            self.firstNode.next= newnode


    def __show(self,start):
        if start.next:
            print start.data
            self.__show(start.next)

    def printlist(self):
        self.__show(self.firstNode)

    def __reverte_recursive(self,node):
        temp = None
        if not node.next: return node
        else:
            temp = self.__reverte_recursive(node.next)
            node.next.next= node
            node.next = None
        return temp

    def reverte_list1(self):
        self.firstNode=self.__reverte_recursive(self.firstNode)

    def __reverte_iterative(self,node):
        temp = None
        previous = None
        while node and node.next:
            temp = node.next
            node.next= previous
            previous = node
            node = temp
        return previous
    def reverte_iterative(self):
        self.firstNode=self.__reverte_iterative(self.firstNode)

nodeA = Node("A")
nodeB = Node("B")
nodeC = Node("C")
nodeD = Node("D")
nodeE = Node("E")


list1= List()

list1.inserthead(nodeA)
list1.inserthead(nodeB)
list1.inserthead(nodeC)
list1.inserthead(nodeD)
list1.inserthead(nodeE)


print "list"
list1.printlist()
print "list reverse"
list1.reverte_list1()
list1.printlist()
list1.reverte_iterative()
print "list reverse reverse"
list1.printlist()

结果如下:

None
E
D
C
B
list reverse
A
B
C
D
E
list reverse reverse
E
D
C
B

由于某种原因,我无法打印所有列表,并且在第一种情况下不打印“A”节点 但打印第一个节点(但我检查了B节点指向A) 第一个反转没问题 但第三个再次不打印 A 节点,即使它由 B 节点指向。 可能打印的问题出在 __show 函数中。 但我想我是一个概念错误。

谢谢

【问题讨论】:

  • C 对于这类事情更容易更好,但我正在接受面试培训,我想看看这在 python 中是如何实现的

标签: python linked-list


【解决方案1】:
def __show(self,start):
   if start.next:
       print start.data
       self.__show(start.next)

只有在当前节点有下一个节点时才打印当前节点,这就是为什么从不打印最后一个节点的原因。 应该是:

def __show(self,start):
   if start:
       print start.data
       self.__show(start.next)

您在检查/分配节点而不是下一个节点时犯了类似的错误,反之亦然(例如在 inserthead() 中 - 这导致 None 被打印)

【讨论】:

    猜你喜欢
    • 2020-06-13
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 2013-07-01
    • 2023-03-24
    • 2014-05-01
    • 1970-01-01
    相关资源
    最近更新 更多