知己知彼,百战不殆,那么双端队列的特色是啥:(1)头部添加,头部取 (2)尾部添加,尾部取 (3)头部添加,尾部取 (4)尾部添加,头部取 总之就是想怎么加就怎么加,想怎么取就怎么取
/**
* 用双链表双端队列
*/
public class Code04 {
public static class Node<V> {
public V value;
public Node<V> last;
public Node<V> next;
public Node(V v) {
value = v;
last = null;
next = null;
}
}
public static class MyQueue<V> {
private Integer size;
private Node<V> head;
private Node<V> tail;
public MyQueue() {
size = 0;
}
public MyQueue(Integer size) {
this.size = size;
}
public boolean isEmpty(){
return size==0;
}
public Node pushHead(Integer value){
Node add = new Node(value);
if(size == 0){
head = add;
tail = add;
} else {
head.last=add;
add.next=head;
head=head.last;
}
size++;
return head;
}
public Node pushTail(Integer value){
Node add = new Node(value);
if(size == 0){
head = add;
tail = add;
} else {
tail.next=add;
add.last=tail;
tail=tail.next;
}
size++;
return head;
}
public Integer popHead(){
if(isEmpty()){
return null;
}
Integer value = (Integer) head.value;
if(head==tail){
head=null;
tail=null;
}else{
head = head.next;
head.last=null;
}
size--;
return value;
}
public Integer popTail(){
if(isEmpty()){
return null;
}
Integer value = (Integer) tail.value;
if(head==tail){
tail=null;
head=null;
}else {
tail = tail.last;
tail.next=null;
}
size--;
return value;
}
public Integer peek(){
if(isEmpty()){
return null;
}
return (Integer) head.value;
}
}
public static void main(String[] args) {
MyQueue stack = new MyQueue();
// stack.pushHead(1);
// stack.pushHead(2);
// stack.pushHead(3);
//
// System.out.println(stack.popHead());
// System.out.println(stack.popHead());
// System.out.println(stack.popHead());
// System.out.println(stack.popHead());
stack.pushTail(1);
stack.pushTail(2);
stack.pushTail(3);
System.out.println(stack.popHead());
System.out.println(stack.popTail());
System.out.println(stack.popHead());
System.out.println(stack.popHead());
}
}
1275

被折叠的 条评论
为什么被折叠?



