def listDistinct(self):
if self.isListEmpty():
return self.failureValue
else:
currentNode = self.head
while currentNode is not None:
previousNode = currentNode
currentNode = currentNode.next
if currentNode.data == previousNode.data: # Line of Error
previousNode.next = currentNode.next
如何获取链表的最后一个节点与前一个节点的比较只有最后一个元素不会被删除,即使它是重复的。
- 由于到达了链表的末尾,所以出现了错误。在执行下一步操作后,您不会检查
None
值。处理此问题的一种方法是检查currentNode
是否在while
条件下具有下一个值
def listDistinct(self):
if self.isListEmpty():
return self.failureValue
else:
currentNode = self.head
while currentNode and currentNode.next:
previousNode = currentNode
currentNode = currentNode.next
if currentNode.data == previousNode.data: # Line of Error
previousNode.next = currentNode.next
- 尝试这个实现,它应该可以工作。上述实现存在逻辑错误。当出现3个或更多相同的数字时,它将跳过元素
def listDistinct(self):
if self.isListEmpty():
return self.failureValue
else:
currentNode = self.head
while currentNode:
nextNode = currentNode.next
while nextNode and nextNode.data == currentNode.data:
currentNode.next = nextNode.next
nextNode = nextNode.next
currentNode = nextNode