[关闭]
@cxm-2016 2016-11-06T15:01:29.000000Z 字数 507 阅读 1812

算法:仅仅使用栈和递归逆序一个栈

算法

版本:1
作者:陈小默
声明:禁止商用,禁止转载

题目要求:仅仅使用递归操作对一个栈进行逆序。
思路:使用汉诺塔问题的思考方式,假设将这个用竹签串起的汉诺塔交给一位聪明的和尚,让他将这个塔进行翻转。那么这个和尚会想:只要我去除了最下面的圆盘,然后将剩下的汉诺塔交给下一位和尚,但是他必须还给我一个已经转置过的汉诺塔,然后我再将取下的最后一块放在顶上,不就完成了转置。那么,我应该怎么取得最后一块呢?我可以先取出最上面的一块,然后将剩下的传递下一位和尚,但是他必须将最后一块和塔分开来还给我,然后我再将最上面的一块放上去就行了。

  1. fun <E> getLast(stack: Stack<E>): E {
  2. val top = stack.pop()
  3. if (stack.isEmpty)
  4. return top
  5. val last = getLast(stack)
  6. stack.push(top)
  7. return last
  8. }
  9. fun <E> reverse(stack: Stack<E>) {
  10. if (stack.isEmpty)
  11. return
  12. val last = getLast(stack)
  13. reverse(stack)
  14. stack.push(last)
  15. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注