如何修复单链表方法append中的错误

2024-06-17 08:16:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个a类节点和一个链接的。我的错误来自linkedList class中的append方法

我试着.append(10)但是当它应该附加到末尾时,它不会只打印10。碰巧有人看到错误了吗

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上运行并且有python3.7.4


Tags: selfnonenodedatareturnifdefhead
1条回答
网友
1楼 · 发布于 2024-06-17 08:16:51

如果查看方法printList,while循环在curNode.nextNone时停止,而curNode是最后一个节点。最后一个节点没有得到要打印的更改。元素10就在那里,只是没印出来

另外,还有一件小事,在类名中使用大写词是一种很好的做法,这样您的代码就可以与recommended style guide保持一致

相关问题 更多 >