【问题标题】:Linked list implementation in python 3python 3中的链表实现
【发布时间】:2020-03-12 07:31:12
【问题描述】:

我仍然是编程的初学者。我学习了 Python 的基础知识。现在我正在学习数据结构和算法。

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

此代码已在 Python 3.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())

【问题讨论】:

  • self.size-=self.size 更改为self.size-=1 你减去size 的整个值,但你只有一个减去1!

标签: python python-3.x linked-list


【解决方案1】:

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

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

【讨论】:

  • 非常感谢@TerryA 花费您宝贵的时间来审核我的代码。
猜你喜欢
  • 2018-04-02
  • 1970-01-01
  • 2014-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-04
相关资源
最近更新 更多