Python用链表实现Stack时每次操作后返回多余None的问题求解
问题原因分析
- 多余的
None全部来自你对top()方法的调用:Python中所有函数如果没有显式写return语句,默认会返回None。你的top()方法内部只执行了print(pop)打印栈顶值,没有返回任何内容,所以你用print(s.top())时,会先打印top()方法内部输出的栈顶数值,再额外打印top()方法默认返回的None。 - 另外空栈分支的
top()、pop()你也只写了return,没有返回值,如果空栈时调用并打印也会输出None,可以根据需求调整为返回特定标识或者抛出异常。
修复方案
方案1:修改top()方法,改为返回栈顶值而非内部打印
这是更符合栈抽象数据类型设计规范的方案,方法仅负责返回数据,打印逻辑交给调用方控制:
def top(self): if self.isEmpty(): print("Hey! The stack is Empty") return # 也可以根据需求改为返回其他空标识 return self.__head.data
修改后原有调用代码不需要改动,就不会再输出多余的None。
方案2:保留top()的内部打印逻辑,调用时不套print
如果你希望top()方法本身就完成打印操作,那调用时直接写s.top()即可,不要用print包裹它的返回值:
# 原有调用代码修改后: s = Stack() s.push(15) s.top() # 不需要加print s.push(16) print(s.pop()) s.top() # 不需要加print
空栈分支优化(可选)
如果不希望空栈调用pop()、top()时也返回None,可以修改空栈分支的返回值,比如:
def pop(self): if self.isEmpty(): print("Hey! The stack is Empty") return -1 # 或者抛出IndexError异常 # 原有逻辑不变 def top(self): if self.isEmpty(): print("Hey! The stack is Empty") return -1 # 原有逻辑不变
内容的提问来源于stack exchange,提问作者Anurag Shukla
相关产品推荐
相关产品推荐

