如何重载链表实现的Stack类的__repr__方法以打印栈内所有元素
错误原因
你的原有__repr__存在三个核心问题:
- 直接修改节点的
elem属性:self._stack.elem = self._stack.next直接篡改了栈内存储的元素值,这是输出出现重复9的核心原因 - 没有用临时变量遍历:直接操作栈的头节点
self._stack会破坏原栈的结构,执行完__repr__后你的栈数据就已经损坏 - 没有返回拼接好的字符串,且末尾会多出多余的逗号
正确实现代码
替换你的__repr__方法为以下内容即可:
def __repr__(self): # 空栈直接返回标识 if self._size == 0: return "Stack([])" # 用临时变量遍历,不修改原栈的头指针和节点数据 current = self._stack elements = [] while current is not None: elements.append(repr(current.elem)) current = current.next # 拼接成类列表的格式,符合Python内置容器的repr习惯 return f"Stack([{', '.join(elements)}])"
实现效果
你依次压入4、9、"joe"后打印栈,输出结果为:Stack(['joe', 9, 4])
完全符合栈先进后出的展示逻辑,且不会修改栈的原有数据。
内容的提问来源于stack exchange,提问作者Apparent
相关产品推荐
相关产品推荐

