package ds;
public class MyNodeQueue<E> {
private class Node<E> {
E val;
Node<E> next;
public Node(E val, Node next) {
this.val = val;
this.next = next;
}
}
private Node<E> head;
private Node<E> tail;
private int size;
public MyNodeQueue() {
}
public void offer(E e) {
Node n = new Node(e, null);
if (tail == null) {
head = tail = n;
} else {
tail.next = n;
tail = n;
}
size++;
}
public E poll() {
if (head == null) {
return null;
}
Node<E> h = head;
//将拉取的节点的下一个节点变成新的表头
head = head.next;
//把旧的表头的下一个节点指向设置为null,让gc回收
h.next = null;
//队列为空
if (head == null)
tail = null;
size--;
return h.val;
}
public E peek() {
return head == null ? null : head.val;
}
public void clear() {
Node h = head;
while (h != null) {
Node temp = h.next;
h.next = null;
h = temp;
}
head = tail = null;
}
}