在python中使用链表实现堆栈。pop方法的问题和关于可变性的问题
我正在尝试使用一个基于节点类的链表来实现一个堆栈。我对我的类的pop方法有一些问题,它似乎没有表现出易变性。当我使用pop类方法时,它会正确返回堆栈顶部,但无法更新堆栈在python中使用链表实现堆栈。pop方法的问题和关于可变性的问题,python,linked-list,stack,Python,Linked List,Stack,我正在尝试使用一个基于节点类的链表来实现一个堆栈。我对我的类的pop方法有一些问题,它似乎没有表现出易变性。当我使用pop类方法时,它会正确返回堆栈顶部,但无法更新堆栈 x=stack_linked(1) x=x.insert(2) x=x.insert(3) x.print() # This is correct and prints 3,2,1 print(x.pop()) # This is correct and prints 3, but doesn't actually modify
x=stack_linked(1)
x=x.insert(2)
x=x.insert(3)
x.print() # This is correct and prints 3,2,1
print(x.pop()) # This is correct and prints 3, but doesn't actually modify my list
x.print() # This prints 3,2,1
为什么自我是不可变的?另外,我如何修改我的类而不完全破坏它或为它创建包装器?这是我的班级
class stack_linked(object):
def __init__(self,data):
self.data=data
self.next=None
def insert(self,front):
front=stack_linked(front)
front.next=self
return front
def peek(self):
if self==None:
return None
else
return self.data
def pop(self):
front=self
self=self.next # some sort of issue here
return front
def print(self):
x=self
if x==None:
print("Empty")
else:
print(x.data)
while x.next !=None:
x=x.next
print(x.data)
仅具有节点和转发链接有点限制,但可以通过使第一个节点包含第二个节点来实现pop(-first):
class stack_linked(object):
def __init__(self, data):
self.data = data
self.next = None
def pop(self):
data = self.data
nxt = self.next
if nxt is None:
self.data = self.next = None
else:
self.data = nxt.data
self.next = nxt.next
nxt.next = None
return data
在实例方法中分配给
self
不会导致整个实例被替换。那么,我该如何重做pop方法?这也是一个易变性问题吗?或者它是不相关的?pop
应该返回数据,而不是节点..不相关,例如,请参见为什么设置nxt.next=None
?nxt.next=None
可以中断任何循环,以便垃圾收集器可以更轻松地工作。语义上也是正确的,因为nxt
对象不再存在,因此不应该指向活动对象。