思路
1.首先,将栈中的所有的元素递归出栈,直至栈空
2.每次递归向上步骤时,将上一步中的栈的元素插入栈底
代码实现
/**
* 给定一个栈,如何只使用栈操作(push和pop)逆置栈中的内容
*/
public static void reverseStack(LinkedListStack stack) {
if (stack.isEmpty()) {
return;
}
int temp = stack.pop();
reverseStack(stack);
insertAtBottom(stack, temp);
}
/**
* 将出栈元素插入栈底
*
* @param stack
* @param data
*/
private static void insertAtBottom(LinkedListStack stack, int data) {
if (stack.isEmpty()) {
stack.push(data);
return;
}
int temp = stack.pop();
insertAtBottom(stack, data);
stack.push(temp);
}
复杂度分析
时间复杂度O(n2)
空间复杂度O(n/2)≈O(n)