算法题目刷题:第三题,反转栈只用递归函数

题目:一个栈依次压入1,2,3,4,5,那么从栈顶部到栈底部分别为5,4,3,2,1.将这个栈转置后,从栈顶到栈底为1,2,3,4,5.也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。

 

思路:这个题目用了递归函数的思想,本来递归函数底层就是栈结构实现的。用图私下做出函数递归调用的流程图一幕了然。这个方法get,自己去想的话着实很难。

//3,栈的反转
  
  int getAndRemoveLastElement(stack &stack)  //获得栈底元素,其他元素的位置不动
  {
		int result = stack.top();stack.pop();
		if (stack.empty()) {
			return result;
		} else {
			int last = getAndRemoveLastElement(stack);
			stack.push(result);
			return last;
		}
	}
  void reverse(stack &stack) {
		if (stack.empty()) {
			return;
		}
		int i = getAndRemoveLastElement(stack);
		reverse(stack);
		stack.push(i);
	}

 

你可能感兴趣的:(刷算法题目)