本题源自左神《程序员面试代码指南》“用一个栈实现另一个栈的排序”题目。

题目

在一个栈中元素的类型为整型,现在想将该栈从栈顶到栈底按从大到小的顺序排序,只许申请一个栈,除此之外,可以申请其他变量,但是不能申请额外的数据结构。

解答

将待排序的栈记为 stack, 辅助栈记为 help。 在 stack 上执行 pop 操作,弹出的元素记为 cur。

  • 如果 cur 小于等于 help 的栈顶元素,则将 cur 直接压入 help
  • 如果 cur 大于 help 的栈顶元素,则将 help 的元素逐一弹出,逐一压入 stack,直到 cur 小于或等于 help 的栈顶元素,再将 cur 压入 help

一直执行以上操作,直到 stack 中的全部元素都压入到 help 栈中(此时从栈顶到栈底:有小到大),最后将help栈中的元素逐一压入stack,即可完成排序。

代码

import java.util.Stack;public class Main {public static void sortStackByStack(Stack<Integer> stack) {Stack<Integer> help = new Stack<Integer>();while (!stack.isEmpty()) {int cur = stack.pop();while (!help.isEmpty() && help.peek() < cur) {stack.push(help.pop());}help.push(cur);}while (!help.isEmpty()) {stack.push(help.pop());}}public static void main(String[] args) {Stack<Integer> stack = new Stack<Integer>();stack.push(3);stack.push(1);stack.push(6);stack.push(2);stack.push(5);stack.push(4);sortStackByStack(stack);System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());}
}

输出:

6
5
4
3
2
1

左神算法:用一个栈实现另一个栈的排序(Java版)相关推荐

  1. 左神算法:求最大子矩阵的大小(Java版)

    本题来自左神<程序员面试代码指南>"求最大子矩阵的大小"题目. 题目 给定一个整型矩阵 map,其中的值只有0和1两种,求其中全是1的所有矩形区域中,最大的矩形区域为1 ...

  2. 左神算法:最大值减去最小值小于或等于num的子数组的数量(Java版)

    本题来自左神<程序员面试代码指南>"最大值减去最小值小于或等于num的子数组的数量"题目. 题目 给定数组 arr 和整数 num,共返回有多少个子数组满足如下情况: ...

  3. 左神算法:单调栈结构(Java版)

    本题来自左神<程序员面试代码指南>"单调栈结构"题目. 题目 给定一个不含有重复值的数组 arr,找到每一个 i 位置左边和右边离 i 位置最近且值比 arr[i] 小 ...

  4. 左神算法:用栈来求解限制后的汉诺塔问题(Java版)

    本题来自左神<程序员面试代码指南>"用栈来求解汉诺塔问题"题目. 题目 限制后的汉诺塔问题如下: 限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧, ...

  5. 左神算法:判断 t1 树中是否有与 t2 树拓扑结构完全相同的子树(Java版)

    本题来自左神<程序员代码面试指南>"判断 t1 树中是否有与 t2 树拓扑结构完全相同的子树"题目. 题目 给定彼此独立的两棵树头节点分别为 t1 和 t2,判断 t1 ...

  6. 左神算法:分别用递归和非递归方式实现二叉树先序、中序和后序遍历(Java版)

    本题来自左神<程序员代码面试指南>"分别用递归和非递归方式实现二叉树先序.中序和后序遍历"题目. 题目 用递归和非递归方式,分别按照二叉树先序.中序和后序打印所有的节点 ...

  7. 左神算法:将搜索二叉树转换成双向链表(Java版)

    本题来自左神<程序员代码面试指南>"将搜索二叉树转换成双向链表"题目. 题目 对二叉树的节点来说,有本身的值域,有指向左孩子节点和右孩子节点的两个指针:对双向链表的节点 ...

  8. 左神算法:将单链表的每K个节点之间逆序(Java版)

    本题来自左神<程序员代码面试指南>"将单链表的每K个节点之间逆序"题目. 题目 给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K 个节点之间逆序,如果 ...

  9. 左神算法:两个单链表相交的一系列问题(链表是否有环 / 两无环链表是否相交 / 两有环链表是否相交)

    本题来自左神<程序员代码面试指南>"两个单链表相交的一系列问题"题目. 题目 在本题中,单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, ...

最新文章

  1. 在Substance Designer中创建砖墙视频教程
  2. openstack登陆dashboard提示认证发生错误
  3. php for windows二进制包,PHP5ForWindowsVC9-x865.4.3安装版
  4. Run-time Settings--General--Run Logic
  5. 【JS新手教程】LODOP打印复选框选中的任务或页数
  6. python--编码问题
  7. WebKit新特性WebGL
  8. Maximum Score After Splitting a String
  9. python机器学习之物体识别
  10. 平安银行网银助手官方版
  11. plt是什么格式文件
  12. android 拍照和选择相册图片剪切
  13. linux mint五笔输入法,Linux Mint安装ibus五笔和拼音输入法简明教程
  14. 【JTAG、SBW、BSL】MSP430的BSL
  15. 华为运营商级路由器配置示例 | 公网IPv4 over SRv6 TE Policy
  16. FL Studio21水果软件最新中文版安装教程
  17. 《如果你想过1%的生活》 - 读后感
  18. WARNING: [Labtools 27-3413] vivado报错调试界面无信号无波形解决方法
  19. 关于别名(alias)的尴尬
  20. pdf横向打印java_java通过html生成pdf,支持css和图片以及横向打印

热门文章

  1. Gym - 102361A Angle Beats(几何)
  2. Zookeeper 安装和配置---学习一
  3. frida hook so层方法大全
  4. docker学习笔记(六)docker-compose
  5. 好文|张一鸣:10年面试2000人,我发现混的好的人,全都有同一个特质
  6. Linux网络子系统
  7. 再见丑陋的 Swagger,这个API神器界面更炫酷,逼格更高,体验更好!
  8. 40个Java多线程问题详解复习
  9. 阿里的离职率真的是互联网大厂里最低的吗?
  10. semaphore 的原理与实现