我正在尝试在 Python 上为链表编写一个添加方法,但它的行为并不如预期。
class linkedlist:
def __init__(self):
self.item=None
self.next=None
def add(self,val):
self.next=self
self.item=val
这不起作用。当我创建一个对象时:
myobj=linkedlist()
myobj.add(1)
myobj.add(2)
print(myobj.next.item)
给出的是 2,而不是我预期的 1。我哪里做错了?
我尝试查看在方法中用另一个相同类型的对象替换自身对象是否安全?但这没有帮助。
我建议你把
node
和linkedlist
和node
类型分开。Anode
引用了next
node
。而 alinkedlist
引用了head
node
并且通常引用了 atail
node
,因此添加新的node
是一个恒定的操作(即不需要遍历整个列表)。这很容易看出,node
每次调用 都需要一个新实例add()
:以下是示例输出:
您只有 1 个对象和 2 个指向它的引用。您需要先复制列表,然后再将其添加到列表中:
澄清一下:
使用您的代码:
与我的:
更新:
首先,你的期望是错误的,你应该得到 3 和 2,这是你弹出头部后留在列表中的值。要获得这些结果,你需要更新指向的内容。你可以在和方法的末尾
a
添加,然后重新分配:return self
add
pop
a
但在我看来,这相当丑陋,我宁愿使用 Allan 的方法......