如何仅用递归函数和栈操作逆序一个栈

题目:

 解题思路:

记住递归内部就是一个栈,写两个递归就能实现队列,即将12345,入栈之后出栈还是12345。

这里是第一个递归实现获取栈底元素,然后再使用第二个递归,实现反转。

 1 /* 递归函数1: 将栈stack的栈底元素返回并移除 */
 2 static int getAndRemoveLastElement(stack<int> data)
 3 {
 4     int result = data.pop();
 5     if (data.empty() )
 6     {
 7          return result;    
 8     }      
 9     else 
10     {
11          int last = getAndRemoveLastElement(data);
12          data.push(result);
13          return last;    
14     }
15 }    
16 
17 public:
18      /* 递归函数2: 逆序一个栈,就是题目要求实现的方法 */
19      void reverse( stack<int>  data)
20     {
21          if (data.empty() )
22          {
23               return;      
24          }
25          int i = getAndRemoveLastElement(data);
26          reverse(data);
27          data.push(i);
28     }      

 

 getAndRemoveLastElement方法在图中简单表示为get方法,表示移除并返回当前栈底元素。

原文地址:https://www.cnblogs.com/Tavi/p/12505452.html