我正在尝试使用仅基于节点类的链接列表来实现堆栈。我的班级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 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)
答案 0 :(得分:2)
您只受限于节点和前向链接,但可以通过使第一个节点包含第二个节点来实现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