如何仅用递归函数和栈操作逆序一个栈
- 题目:
一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序 但是只能用递归函数来实现,不能用其他数据结构。
- 解题思路
getAndRemoveLastElement取出栈中的最后一个元素并在栈中移除;实现就是将栈中元素全部出栈,然后在入栈
__reverse调用上面的函数,不停的将最后一个元素移出来,全部移除后入栈,逆序。
代码实现
class Stack_Reverse:
def __init__(self, _stack):
self._stack = _stack
@property
def reverse(self):
self._reverse(_stack=self._stack)
def _reverse(self, _stack):
"""逆序一个栈"""
if not _stack:
return
else:
i = self._getAndRemoveLastElement(_stack)
self._reverse(_stack)
_stack.append(i)
def _getAndRemoveLastElement(self, _stack):
"""将栈stack的栈底元素返回并移除"""
result = _stack.pop()
if not _stack:
return result
else:
last = self._getAndRemoveLastElement(_stack)
_stack.append(result)
return last
def __str__(self):
return str(self._stack)
- 测试代码
if __name__ == '__main__':
stack = [1, 2, 3, 4, 5]
New_Stack_Reverse = Stack_Reverse(stack)
New_Stack_Reverse.reverse
print(New_Stack_Reverse.__str__())
# [5, 4, 3, 2, 1]