本文共 1146 字,大约阅读时间需要 3 分钟。
【题目】
一个栈依次压入1、2、 3、4、5,那么从栈顶到栈底分别为5、4、3、2、1。将这个栈转置后, 从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现, 不能用其它数据结构。
【难度】
两星
【解答】
本题我们要实现两个递归函数——getAndRemoveLastElement,reverse
递归的思想就是把问题的规模由大变小, 但是解决问题的方法不变。
一.我们先来讲第二个函数reverse,reverse需要借助第一个函数getAndRemoveLastElement:
递归思想:
递归终止条件:
我们调用reverse的参数stack的规模不断缩小, 直到栈空,说明元素都移了出来, 此时返回, 就会一个一个元素压回去
【实现代码】
public static void reverse(Stackstack) { if(stack.isEmpty()) { return; }else { int value = getAndRemoveLastElement(stack); reverse(stack); stack.push(value); } }
二. getAndRemoveLastElement
递归终止条件:
不断调用getAndRemoveLastElement, 其参数stack的规模不断减小, 弹出最后一个元素时栈空, 说明最后一个元素就是栈底元素, 返回即可。
【实现代码】
public static int getAndRemoveLastElement(Stackstack){ int value = stack.pop() if(stack.isEmpty()){ return value; } int result = getAndRemoveLastElement(stack) stack.push(value); return result;}
转载地址:http://ohaii.baihongyu.com/