@cxm-2016
        
        2016-11-06T07:01:29.000000Z
        字数 507
        阅读 2125
    算法
版本:1
作者:陈小默
声明:禁止商用,禁止转载
题目要求:仅仅使用递归操作对一个栈进行逆序。
思路:使用汉诺塔问题的思考方式,假设将这个用竹签串起的汉诺塔交给一位聪明的和尚,让他将这个塔进行翻转。那么这个和尚会想:只要我去除了最下面的圆盘,然后将剩下的汉诺塔交给下一位和尚,但是他必须还给我一个已经转置过的汉诺塔,然后我再将取下的最后一块放在顶上,不就完成了转置。那么,我应该怎么取得最后一块呢?我可以先取出最上面的一块,然后将剩下的传递下一位和尚,但是他必须将最后一块和塔分开来还给我,然后我再将最上面的一块放上去就行了。
fun <E> getLast(stack: Stack<E>): E {val top = stack.pop()if (stack.isEmpty)return topval last = getLast(stack)stack.push(top)return last}fun <E> reverse(stack: Stack<E>) {if (stack.isEmpty)returnval last = getLast(stack)reverse(stack)stack.push(last)}
