码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-09-19 21:48:22      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:rev   test   class   reverse   package   逆序   print   auth   一段   

说在前面

这是一段递归代码,int result = stack.pop() ,一开始 stack.pop() 已经被赋值到result 整型变量,所以 getAndRemoveLastElement(stack) 的返回值为1时,由于并没有再次给 result 重新赋值,所以 result 还是为2


stack.push(1);
stack.push(2);
getAndRemoveLastElement(stack);

public int getAndRemoveLastElement(Stack<Integer> stack){
       int result = stack.pop();
       
//栈是空的就没有执行的必要了,直接返回
       if (stack.isEmpty()){
           return result;
       }else{
           int last = getAndRemoveLastElement(stack);
           stack.push(result);
           return last;
       }
    }

回调函数 reverse(),当 stack 为空时,无返回值,执行回调函数下面的 sout(push) 语句。reverse() 并不关心被调用者在何处,也不关心被调用者用它传递的处理程序做了什么,它只关心返回值,因为基于返回值,它将继续执行或退出。

    public void reverse(Stack<Integer> stack){
    //栈是空的就没有执行的必要了
        if (stack.isEmpty()){
            return;
        }
        int i = getAndRemoveLastElement(stack);
        reverse(stack);
        System.out.println(stack.push(i));
    }
}

命题

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

package com.lorem.stack;

import org.junit.Test;
import java.util.Stack;

/**
 * 如何仅用递归函数和栈操作逆序一个栈【题目】
 *
 * 一个栈依次压入 1、2、3、4、5,那么从栈顶到栈底分别为 5、4、3、2、1。
 * 将这个栈转置后,从栈顶到栈底为 1、2、3、4、5,也就是实现栈中元素的逆序,
 * 但是只能用递归函数来实现,不能用其他数据结构。
 */

/**
 * @author lorem 
 * @date 2018/8/23
 */
public class MyStack {

    @Test
    public void test(){
       MyStack myStack = new MyStack();
       Stack stack = new Stack<Integer>();
       stack.push(1);
       stack.push(2);
//      myStack.reverse(stack);
        myStack.getAndRemoveLastElement(stack);
    }


    public int getAndRemoveLastElement(Stack<Integer> stack){
       int result = stack.pop();
//        System.out.println(result);
       if (stack.isEmpty()){
           return result;
       }else{
           int last = getAndRemoveLastElement(stack);
           stack.push(result);
           return last;
       }
    }
    public void reverse(Stack<Integer> stack){
        if (stack.isEmpty()){
            return;
        }
        int i = getAndRemoveLastElement(stack);
        reverse(stack);
        System.out.println(stack.push(i));
    }
}

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

标签:rev   test   class   reverse   package   逆序   print   auth   一段   

原文地址:https://www.cnblogs.com/loremwalker/p/9676648.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!