仅用递归函数和栈操作逆序一个栈
Posted 牛哄哄的柯南
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅用递归函数和栈操作逆序一个栈相关的知识,希望对你有一定的参考价值。
仅用递归函数和栈操作逆序一个栈
【题目】
一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后,从栈顶到栈底为 1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
【思路】
要求只能用递归函数实现,需要设计两个函数,函数一实现返回栈底元素并移除;函数二实现逆序栈,需要使用函数一。
说明:图片来自左神的程序代码面试指南,仅供学习使用。
函数一:
//返回栈底元素并移除
public static int getAndRemoveLastElement(Stack<Integer> stack)
int res = stack.pop();
if(stack.isEmpty())
return res;
else
int last = getAndRemoveLastElement(stack);
stack.push(res);
return last;
函数二:
//逆序栈
public static void reverse(Stack<Integer> stack)
if(stack.isEmpty())
return ;
int i = getAndRemoveLastElement(stack);
reverse(stack);
stack.push(i);
【代码】
package keafmd.accumulate.codeinterviewguide.reversestack;
import java.util.Stack;
/**
* Keafmd
*
* @ClassName: ReverseStack
* @Description: 使用函数逆序栈
* @author: 牛哄哄的柯南
* @date: 2022-06-22 11:01
*/
public class ReverseStack
//返回栈底元素并移除
public static int getAndRemoveLastElement(Stack<Integer> stack)
int res = stack.pop();
if(stack.isEmpty())
return res;
else
int last = getAndRemoveLastElement(stack);
stack.push(res);
return last;
//逆序栈
public static void reverse(Stack<Integer> stack)
if(stack.isEmpty())
return ;
int i = getAndRemoveLastElement(stack);
reverse(stack);
stack.push(i);
public static void main(String[] args)
Stack<Integer> stack = new Stack<>();
for(int i=1;i<=5;i++)
stack.push(i);
System.out.print("逆序前:");
while (!stack.isEmpty())
System.out.print(stack.pop()+" ");
System.out.println();
for(int i=1;i<=5;i++)
stack.push(i);
reverse(stack);
System.out.print("逆序后:");
while (!stack.isEmpty())
System.out.print(stack.pop()+" ");
System.out.println();
效果:
逆序前:5 4 3 2 1
逆序后:1 2 3 4 5
Process finished with exit code 0
以上就是仅用递归函数和栈操作逆序一个栈的全部内容
版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/
个人博客链接:https://www.keafmd.top/
看完如果对你有帮助,感谢点击下面的点赞支持!
[哈哈][抱拳]
加油!
共同努力!
Keafmd
CSDN 社区图书馆,开张营业! 深读计划,写书评领图书福利~以上是关于仅用递归函数和栈操作逆序一个栈的主要内容,如果未能解决你的问题,请参考以下文章