AttributeError: у объекта 'NoneType' нет атрибута 'data' - когда я удаляю повторяющиеся элементы из отсортированного связанного списка - PullRequest
0 голосов
/ 19 февраля 2020
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

Как получить последний узел связанного списка, получить по сравнению с его предыдущим узлом. Только последний элемент не удаляется, даже если он является дубликатом.

1 Ответ

0 голосов
/ 19 февраля 2020
  • Вы получаете ошибку, потому что достигли конца связанного списка. И после следующих действий вы не проверяете значение 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
...