左程云代码面试指南:仅使用递归函数和栈实现一个逆序栈
来源:互联网 发布: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
- 左程云代码面试指南:仅使用递归函数和栈实现一个逆序栈
- 程序员面试指南之如何仅用递归函数和栈操作逆序一个栈
- 仅用递归函数和栈操作逆序一个栈
- 仅用递归函数和栈逆序一个栈
- 仅用递归函数和栈操作逆序一个栈
- 仅用递归函数和栈操作逆序一个栈
- coding interview guide-仅用递归函数和栈操作逆序一个栈-c++实现
- 003如何仅使用递归函数和栈操作逆序一个栈
- 栈和队列之仅用递归函数和栈操作逆序一个栈
- 栈和队列(3)--如何仅用递归函数和栈操作逆序一个栈
- 1栈和队列--仅用递归函数和栈操作逆序一个栈
- 栈和队列之仅用递归函数和栈操作逆序一个栈
- 栈和队列——如何仅用递归函数和栈操作逆序一个栈
- 栈和队列 如何仅用递归函数和栈操作逆序一个栈
- 栈和队列---如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 3.如何仅用递归函数和栈操作逆序一个栈
- 数据结构 如何仅用递归函数和栈操作逆序一个栈
- hdu5692 (dfs序+线段树)
- 【POJ】Sumsets
- Java中如何遍历Map对象的4种方法
- Leetcode 122. Best Time to Buy and Sell Stock II
- Leetcode 123. Best Time to Buy and Sell Stock III
- 左程云代码面试指南:仅使用递归函数和栈实现一个逆序栈
- python学习(一)
- uva 170
- Putty基础教程之(一).入门命令学习及编写HTML
- 用Construct 2制作一个升级版的坦克大战
- Leetcode 188. Best Time to Buy and Sell Stock IV
- CSS中的渐变效果
- 95.Validate Binary Search Tree-验证二叉查找树(中等题)
- 斐波那契数列