算法 --- 栈的逆序排列
作者:互联网
题目描述:
一个栈一次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序。请设计一个算法实现逆序栈的操作,但是只能用递归函数来实现,而不能用另外的数据结构。
给定一个栈stack以及栈的大小top,请返回逆序后的栈。
测试样例:[1,2,3,4,5],5
返回:[5,4,3,2,1]
解题思路:
利用递归,将栈底元素取出,其他元素依次下移,经过多次递归,形成栈的逆序排列。
Java源码实现:
package com.suanfa;
import java.util.Scanner;
import java.util.Stack;
public class Test {
public static void main(String[] args) {
Stack<Integer> stack = new Stack<>();
Scanner scanner = new Scanner(System.in);
int size = scanner.nextInt();
for (int i = 1; i <= size; i++) {
stack.push(scanner.nextInt());
}
new Test().reverse(stack);
while(!stack.isEmpty()) {
System.out.println(stack.pop());
}
}
public void reverse(Stack<Integer> stack) {
if (stack.isEmpty()) {
return;
} else {
int last = get(stack); // 取出栈底元素
reverse(stack);
stack.push(last);
}
}
/**
* 递归思想
* 出口:找到栈底元素,此时栈已空,则可以通过判断栈空停止递归
*/
private int get(Stack<Integer> stack) {
int result = stack.pop();
if (stack.isEmpty()) {
return result;
} else {
int last = get(stack);
stack.push(result);
return last;
}
}
}
等待中的小码农 发布了47 篇原创文章 · 获赞 3 · 访问量 4640 私信 关注
标签:排列,last,int,栈底,算法,Stack,stack,逆序 来源: https://blog.csdn.net/zhangting19921121/article/details/104632653