如何仅用递归函数和栈操作逆序一个栈
-
题目:
一个栈依次压入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]