1.題目描述
實現一個棧的逆序,但是隻能用遞歸函數的這個棧本身的操作來實現,而不能用自己申請另外的數據結構
2.思路&code
思路
1.棧的逆序,如果不借助任何的數據結構,我們只能依靠遞歸函數來實現。而這個思路也是不容易想到的。首先,我們需要一個get()函數,每次返回棧底的元素,並在棧中移除。遞歸函數是一個系統調用棧實現。因此很容易實現。第二個函數,reverse函數,將棧中的元素進行逆序。
code
package com.ncst.algo;
import java.util.Stack;
/**
* @author i
* @create 2020/6/29 19:25
* @Description 實現一個棧的逆序,但是隻能用遞歸函數的這個棧本身的操作來實現,而不能用自己申請另外的數據結構
*
* 3 2 1 1 2 3
*/
public class StackResve {
//移除棧底元素並返回。
public static int get(Stack<Integer> stack){
int result = stack.pop();//
if(stack.isEmpty()){
return result;
}else {
int last = get(stack);
stack.push(result);
return last;
}
}
//將棧中元素逆序的方法
public static void reverse(Stack<Integer> stack){
if (stack.isEmpty()){
return;
}
int i = get(stack);
reverse(stack);
stack.push(i);
}
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
stack.push(3);
stack.push(2);
stack.push(1);
reverse(stack);
while (!stack.isEmpty()){
System.out.print(stack.pop()+"\t");
}
}
}