gpt4 book ai didi

python 双向链表 __len__

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:30 26 4
gpt4 key购买 nike

我似乎无法让我的 len 功能正常工作,我一直在尝试很多东西,但我是一个完全的初学者,所以我很确定我错过了一些完全明显的东西。这是我的代码...

 def __len__(self):
if self.head is None:
return 0
else:
return self.size

我的想法很简单。如果双向链表的头为None,那么它一定是空的,所以返回0,否则,只返回链表的大小。

但是,我收到一个断言错误,说...

AssertionError: List should contain 1 element, but length is 0

感谢任何帮助,提前致谢。

编辑:这是运行我的函数的代码...

testList.add(14)
assert len(testList) == 1, "List should contain 1 element, but length is %r" % len(testList)

EDIT2:这是我的添加函数,我很确定它是对的,我花了 2 个小时在上面......

def add(self, value):
newNode = DoubleListNode(value)
if self.head is None:
self.head = newNode
self.tail = newNode
newNode.prev = None
newNode.next = None
return newNode
elif value < self.head.data:
self.head = newNode
newNode.next = self.head
newNode.prev = None
return newNode
elif value > self.tail.data:
self.tail = newNode
newNode.prev = self.tail
newNode.next = None
return newNode
else:
node = self.head
node2 = node
while node is not None and node.data < value :
node = node.next
node2 = node.prev
newNode.next = node.prev
newNode.prev = node2.next
return newNode

最佳答案

您的add函数没有任何会增加 self.size 的内容。所以这就是你在 __init__ 中设置的值,大概是 0 .

因此,当列表实际上为空时,__len__返回0因为self.headNone .

添加元素后,它仍然返回 0因为self.size0 .

<小时/>

此外,您的代码中至少还有一个其他问题。看看这个:

elif value > self.tail.data:
self.tail = newNode
newNode.prev = self.tail
newNode.next = None
return newNode

显然,newNode.prev最终会指向它自己,而不是之前的尾部。

有很多东西可以帮助判断代码的正确性——单元测试、没有参与过代码的人进行的代码审查、使用交互式可视化工具单步执行代码、形式证明等等——但是你为此工作的时间不是其中之一。

关于python 双向链表 __len__,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15695846/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com