思路:用两个栈实现队列。插入时可以直接插,删除时注意两栈是否为空,考虑不同情况怎么解决
class CQueue{
LinkedList<Integer> stack1;
LinkedList<Integer> stack2;
public CQueue(){
stack1 = new LinkedList<>();
stack2 = new LinkedList<>();
}
public void appendTail(int value){
stack1.push(value);
}
public int deleteHead(){
if (stack2.isEmpty() && !stack1.isEmpty()){
while (!stack1.isEmpty()){
stack2.push(stack1.pop());
}
return stack2.pop();
}else if (stack2.isEmpty() && stack1.isEmpty()){
return -1;
}else {
return stack2.pop();
}
}
}
思路:用链表实现,注意基操
class MinStack{
public MinStack(){
}
private Node head;
public void push(int x) {
if ( head == null){
head = new Node(x,x,null);
}else {
head = new Node(x,Math.min(head.min,x),head);
}
}
public void pop() {
head = head.next;
}
public int top() {
return head.val;
}
public int min() {
return head.min;
}
private class Node {
int val;
int min;
Node next;
public Node(int val, int min, Node next) {
this.val = val;
this.min = min;
this.next = next;
}
}
}