秦大圣的专栏

一个菜鸟的进击之路

左程云代码面试指南:仅使用递归函数和栈实现一个逆序栈

仅使用递归函数和栈实现一个逆序的栈

【题目】:
一个栈依次压入1、2、3、4、5,那么这个栈从栈顶到栈底依次为5、4、3、2、1。将这个栈转置后,从栈顶到栈底依次为1、2、3、4、5,实现栈中元素的逆序,但是只能使用递归函数来实现,不能使用其他数据结构。


【解答】:

主要是查栈的操作和递归函数的设计,我们设计两个递归函数:

1.获取栈底元素并且从栈底移除它


public static int getAndRemoveLastElement(Stack<Integer> stack) {
    int result = stack.pop();
    if(stack.isEmpty()) {
        return result;
    } else {
        int last = getAndRemoveLastElement(stack);
        stack.push(result);
        return last;
    }       
}

2.逆序一个栈


public static void reverse(Stack<Integer> stack) {
    if(stack.isEmpty()) {
        return;
    }
    int i = getAndRemoveLastElement(stack);
    reverse(stack);
    stack.push(i);
}

完整代码如下:
ReverseStack.java

package com;

import java.util.Stack;

/*
 * 实现一个逆序功能的栈
 */
public class ReverseStack {

    //在不改变栈中元素顺序情况下,获取当前栈中栈底元素
    public static int getAndRemoveLastElement(Stack<Integer> stack) {
        int result = stack.pop();
        if(stack.isEmpty()) {
            return result;
        } else {
            int last = getAndRemoveLastElement(stack);
            stack.push(result);
            return last;
        }       
    }

    //逆序一个栈
    public static void reverse(Stack<Integer> stack) {
        if(stack.isEmpty()) {
            return;
        }
        int i = getAndRemoveLastElement(stack);
        reverse(stack);
        stack.push(i);
    }
}

Test.java
package com;

import java.util.Stack;

public class Test {

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<Integer>();
        for(int i=1; i<5; i++) {
            stack.add(i);
        }
        for(int i=0; i<4; i++) {
            System.out.print("--" + stack.get(i));
        }
        System.out.println("");

        ReverseStack.reverse(stack);
        for(int i=0; i<4; i++) {
            System.out.print("--" + stack.get(i));
        }
    }
}

结果如下:

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qinjisheng_11/article/details/52753132
文章标签: 数据结构 java笔试
个人分类: Java笔试
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭