Как исправить ошибки в методе добавления односвязных списков - PullRequest
1 голос
/ 23 марта 2019

У меня есть два класса, узел и связанный.Моя ошибка исходит от метода добавления, расположенного в linkedList class.

Я пытаюсь .append(10), но он не печатает 10 только 5, когда он должен добавляться в конец.Кто-нибудь может случайно увидеть ошибку?

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
class linkedList:
    def __init__(self):
        self.head = None
    def append(self, data):
        newNode = Node(data)
        if self.head == None:
            self.head = newNode
            return
        else:
            lastNode = self.head
            while lastNode.next != None:
                lastNode = lastNode.next
            lastNode.next = newNode
    def prepend(self, data):
        newNode = Node(data)
        if self.head == None:
            self.head = newNode
            return
        else:
            newNode.next = self.head
            self.head = newNode
    def insertAfterNode(self, prevNode, data):
        newNode = Node(data)
        newNode.next = prevNode.next
        prevNode.next = newNode
    def printList(self):
        curNode = self.head
        while curNode.next != None:
            print(curNode.data)
            curNode = curNode.next
    def deleteNode(self, key):
        curNode = self.head
        if curNode != None and curNode.data == key:
            self.head = curNode.next
            curNode = None
            return
        else:
            prev = None
            while curNode != None and curNode.data != key:
                prev = curNode
                curNode = curNode.next
            if curNode == None:
                print("The data is not found in the list")
                return
            else:
                prev.next = curNode.next
                curNode = None

# Testing the Linked List
linkedLst = linkedList()
linkedLst.append(5)
linkedLst.append(10)
linkedLst.printList()
linkedLst.prepend(15)
linkedLst.printList()
linkedLst.insertAfterNode(linkedLst.head.next, 6)
linkedLst.insertAfterNode(linkedLst.head.next.next, 8)
linkedLst.printList()
linkedLst.deleteNode(6)
linkedLst.deleteNode(20)
linkedLst.printList()

Ожидаемый результат должен быть 5 10, 15 5 10, 15 6 8 5 10, 15 8 5 10, а затем сообщение об ошибке, в котором говорится, что его нельзя удалить.Тем не менее, я получаю 5, 15 5, 15 6 8 5, 15 8 5, и это исключает 10. Я работаю на Vim и у меня есть Python 3.7.4

1 Ответ

0 голосов
/ 23 марта 2019

Если вы посмотрите на метод printList, цикл while останавливается, когда curNode.next равен None, то есть когда curNode является последним узлом. Последний узел не получил изменения для печати. Элемент 10 есть, он просто не печатается.

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

...