python中的单链表反转
我试图用python创建一个简单的单链表。 (我知道不需要用python实现list,但这不是重点) 这是我的密码:python中的单链表反转,python,linked-list,Python,Linked List,我试图用python创建一个简单的单链表。 (我知道不需要用python实现list,但这不是重点) 这是我的密码: class Node: def __init__(self,data): self.data = data self.next= None class List: def __init__(self): self.firstNode = Node(None) def inserthead(self,n
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”节点
但打印第一个节点(但我选中了D,B节点指向A)
第一个倒挡是可以的
但是第三个也不打印A节点,即使它是由B节点指向的。
打印的问题可能出在_显示功能中。
但我想我有一个概念上的缺陷
谢谢
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
)C更适合这种情况,但我正在接受面试培训,我想看看这在python中是如何实现的