如何仅用递归函数和栈操作逆序一个栈
- 题目:
一个栈依次压入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@propertydef reverse(self):self._reverse(_stack=self._stack)def _reverse(self, _stack):"""逆序一个栈"""if not _stack:returnelse:i = self._getAndRemoveLastElement(_stack)self._reverse(_stack)_stack.append(i)def _getAndRemoveLastElement(self, _stack):"""将栈stack的栈底元素返回并移除"""result = _stack.pop()if not _stack:return resultelse:last = self._getAndRemoveLastElement(_stack)_stack.append(result)return lastdef __str__(self):return str(self._stack)
- 测试代码
if __name__ == '__main__':stack = [1, 2, 3, 4, 5]New_Stack_Reverse = Stack_Reverse(stack)New_Stack_Reverse.reverseprint(New_Stack_Reverse.__str__())# [5, 4, 3, 2, 1]
