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

来源:互联网 发布:adobe 2018套装软件 编辑:程序博客网 时间:2024/06/16 12:17

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

【题目】:
一个栈依次压入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));        }    }}

结果如下:

1 0
原创粉丝点击