美文网首页
用递归函数和栈操作逆序一个栈

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

作者: 囧略囧 | 来源:发表于2018-10-27 13:28 被阅读0次

题目描述

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

image

分析

我们知道递归实质也是一种栈,要通过递归来实现压入5、4、3、2、1,那么递归中获得这些数据的顺序应该是1、2、3、4、5,也就是需要依次获得原栈的栈底元素。

而获得栈底元素也可以通过另一个递归来实现。

于是我们可以通过两个递归函数来实现整个过程:

public class Solution {
    public int getLast(Stack<Integer> s) {
        int current = s.pop();
        if(s.isEmpty()) {
            return current;
        }
        else {
            int last = getLast(s);
            s.push(current);
            return last;
        }
    }
    public void reverse(Stack<Integer> s) {
        if(s.isEmpty()) {
            return;
        }
        else {
            int current = getLast(s);
            reverse(s);
            s.push(current);
        }
    }
}

函数getLast来获得原栈的栈底元素,将栈底元素从原栈中删除且不破坏其他元素。

函数reverse依次获得栈底元素,通过递归特性将最先获得的元素最后压入,最后获得元素最先压入。

相关文章

网友评论

      本文标题:用递归函数和栈操作逆序一个栈

      本文链接:https://www.haomeiwen.com/subject/fdjktqtx.html