3 回答

TA貢獻1860條經驗 獲得超8個贊
首先,您Node()擁有None不正確值的init head頭應該有一個空頭,這就是為什么None最后看到它的原因,因為它傳播到結尾,最后您不打印最后一個,Node()因為最后一個節點沒有next此條件,因此不顯示Node沒有下一個:
while currentNode.next != None:
print(currentNode.data, " --> ", end="")
currentNode = currentNode.next
因此,您需要再打印一張。
下面的工作示例略有簡化:
class Node:
def __init__(self, data=None, next=None):
self.data = data
self.next = next
def get_data(self):
return self.data
def set_data(self, data):
self.data = data
def get_next(self):
return self.next
def set_next(self, node):
self.next = node
class SingleyLinkedList:
def __init__(self):
self.head = None
def insertAtHead(self, data):
old_head = self.head
self.head = Node(data, old_head)
print("Inserted ", data, " at the head")
def insertAtEnd(self, data):
currentNode = self.head
while currentNode.get_next() != None:
currentNode = currentNode.next
currentNode.set_next(Node(data))
print("Inserted ", data, " at end")
def printNode(self):
print("\nPrinting the nodes")
currentNode = self.head
while currentNode.next != None:
print(currentNode.data, " --> ", end="")
currentNode = currentNode.next
print(currentNode.data, " --> ", end="")
print(" NULL \n")
s = SingleyLinkedList()
s.insertAtHead(5)
s.printNode()
s.insertAtHead(10)
s.printNode()
s.insertAtHead(1)
s.printNode()
s.insertAtEnd(20)
s.printNode()
輸出:
Inserted 5 at the head
Printing the nodes
5 --> NULL
Inserted 10 at the head
Printing the nodes
10 --> 5 --> NULL
Inserted 1 at the head
Printing the nodes
1 --> 10 --> 5 --> NULL
Inserted 20 at end
Printing the nodes
1 --> 10 --> 5 --> 20 --> NULL

TA貢獻1828條經驗 獲得超3個贊
您的代碼中的問題是:
self.head = Node()
例如,當您實例化SingleyLinkedList類時。您正在將鏈接列表對象的頭分配給下一個為的此類節點None。
因此,您將獲得None打印聲明Printing the nodes 1 --> 10 --> 5 --> None --> NULL
下面是正確的代碼:
class Node:
def __init__(self):
self.data = None
self.next = None
def get_data(self):
return self.data
def set_data(self, data):
self.data = data
def get_next(self):
return self.next
def set_next(self, node):
self.next = node
class SingleyLinkedList:
def __init__(self):
self.head = None
def insertAtHead(self, data):
newNode = Node()
newNode.set_data(data)
if self.head:
newNode.next = self.head
self.head = newNode
else:
self.head = newNode
print "Inserted ", data, " at the head"
def insertAtEnd(self, data):
currentNode = self.head
new_node = Node()
new_node.set_data(data)
while currentNode.get_next() != None:
currentNode = currentNode.next
currentNode.set_next(new_node)
print("Inserted ", data, " at end")
def printNode(self):
print("\nPrinting the nodes")
currentNode = self.head
while currentNode != None :
print currentNode.data,
print " --> ",
currentNode = currentNode.next
s = SingleyLinkedList()
s.insertAtHead(5)
s.printNode()
s.insertAtHead(10)
s.printNode()
s.insertAtHead(1)
s.printNode()
s.insertAtEnd(20)
s.printNode()
輸出為:
Inserted 5 at the head
Printing the nodes
5 -->
Inserted 10 at the head
Printing the nodes
10 --> 5 -->
Inserted 1 at the head
Printing the nodes
1 --> 10 --> 5 -->
Inserted 20 at end
Printing the nodes
1 --> 10 --> 5 --> 20 -->
添加回答
舉報