python3中链表的实现

2024-04-19 14:25:53 发布

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

我还是个编程初学者。我学习了Python的基础知识。现在我正在学习数据结构和算法。你知道吗

我已经实现了一个链表。但里面有个问题。删除一个元素后,我的大小为0。我不知道错误是从哪里来的。你知道吗

这段代码在python3.7.4中进行了测试。你知道吗

class Node(object):
    def __init__(self, data):
        self.data = data
        self.nextNode = None


class LinkedList(object):
    def __init__(self):
        self.head = None
        self.size = 0

    # O(1)
    def insertStart(self, data):  # insert data at beginnning of the list
        self.size += 1
        newNode = Node(data)
        if not self.head:  # the head is None
            self.head = newNode
        else:  # the head is not None
            newNode.nextNode = self.head
            self.head = newNode

    def remove(self,data):
        if self.head is None:
            return

        self.size-=self.size

        currentNode=self.head
        previousNode=None

        while currentNode.data != data:
            previousNode=currentNode
            currentNode=currentNode.nextNode

        if previousNode is None:
            self.head = currentNode.nextNode
        else:
            previousNode.nextNode=currentNode.nextNode

    # O(1)
    def size1(self):
        return self.size

    # O(N)
    def size2(self):
        actualNode = self.head
        size = 0

        while actualNode is not None:
            size += 1
            actualNode = actualNode.nextNode
        return size

    # O(N)
    def insertEnd(self, data):
        self.size += 1
        newNode = Node(data)
        actualNode = self.head
        while actualNode.nextNode is not None:
            actualNode = actualNode.nextNode
        actualNode.nextNode = newNode

    def traverseList(self):
        actualNode = self.head
        while actualNode is not None:
            print("%d " % actualNode.data)
            actualNode = actualNode.nextNode

a=LinkedList()
a.insertStart(3)
a.insertStart(4)
a.insertEnd(5)

#a.remove(3)
#a.remove(4)
a.remove(5)
print(a.traverseList())
print(a.size1())

Tags: selfnonedatasizeisdefnothead
1条回答
网友
1楼 · 发布于 2024-04-19 14:25:53

self.size中减去self.size,显然返回0。您只想删除1(self.size -= 1

另外,你还有一个错误。如果尝试删除不存在的节点,会发生什么情况?条件while currentNode.data != data:将引发非类型错误,因为它最终将到达列表的末尾(None),而没有找到节点。你知道吗

相关问题 更多 >