2020.04.27
题目:
用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail 和deleteHead,分别完成在队列尾部插入结点和在队列头部删除结点的功能。
点击链接
解题思路:
建立两个栈,当然用泛型作为类型更好,第一个栈用来在队尾添加新值(push),如果需要删除队头,第二个栈如果没有值就从第一个栈中弹出(pop)再压入(push),如果有值,就直接弹出,这里判断两次第二个栈的原因防止两个栈都没有值还要弹出。点击链接有图,可能更清晰。
package offer07;
import java.util.Stack;
public class Test {
public static void main(String[] args) {
Stack<String> stack1 = new Stack<String>();
Stack<String> stack2 = new Stack<String>();
stack1.push("A");
stack1.push("B");
stack1.push("C");
stack1.push("D");
System.out.println(appendTail(stack1, "new1"));
System.out.println(appendTail(stack1, "new2"));
System.out.println(deleteHead(stack1, stack2));
System.out.println(deleteHead(stack1, stack2));
System.out.println(deleteHead(stack1, stack2));
System.out.println(deleteHead(stack1, stack2));
System.out.println(deleteHead(stack1, stack2));
System.out.println(deleteHead(stack1, stack2));
System.out.println(appendTail(stack1, "new3"));
System.out.println(deleteHead(stack1, stack2));
System.out.println(deleteHead(stack1, stack2));
}
public static boolean appendTail(Stack<String> S1,String newString) {
S1.push(newString);
return true;
}
public static boolean deleteHead(Stack<String> S1,Stack<String> S2) {
if(S2.empty()) {
while (!S1.empty()) {
S2.push(S1.pop());
}
}
if(S2.empty()) {
throw new RuntimeException("没有数据啦!");
}else {
S2.pop();
}
return true;
}
}