題目
將一個棧里面的元素逆序,只能用遞歸函數來實現,不能用其他數據結構。
要求
- 只能用遞歸函數來實現
- 可以使用現成的棧類型
思路
為了將棧逆序,只需要按順序將棧頂至棧底的元素拿出并移除,放置到棧頂中,這樣就可以將棧逆序。
代碼
實現代碼
import java.util.Stack;
/**
* Created by wentian on 16/6/10.
*/
public class ReverseStack<T> {
public Stack<T> reverseStack(Stack<T> stackData) {
int size = stackData.size();
T pushElement = null;
for (int i = 0; i < size; i++) {
pushElement = getAndPopBottomElement(stackData, i);
stackData.push(pushElement);
}
return stackData;
}
public T getAndPopBottomElement(Stack<T> stackData, int index) {
T bottom = stackData.pop();
if (0 == index)
return bottom;
T result = getAndPopBottomElement(stackData, index - 1);
stackData.push(bottom);
return result;
}
}
測試代碼
import org.junit.Test;
import java.util.Stack;
import static org.junit.Assert.*;
/**
* Created by wentian on 16/6/10.
*/
public class ReverseStackTest {
@Test
public void reverseStack() throws Exception {
ReverseStack<Integer> reverseStack = new ReverseStack<Integer>();
Stack<Integer> stackData = new Stack<Integer>();
stackData.push(1);
stackData.push(2);
stackData.push(3);
reverseStack.reverseStack(stackData);
while(!stackData.empty()){
System.out.println(stackData.pop());
}
}
}