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

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 社区图书馆,开张营业! 深读计划,写书评领图书福利~

以上是关于仅用递归函数和栈操作逆序一个栈的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

[Daily]仅用递归函数和栈操作逆序一个栈