package com.galvarez.ttw.utils;
public class MyQueue<T> {
private int size;
private Node head;
private Node tail;
public MyQueue() {
head = tail = null;
size = 0;
}
public void push(T data) {
Node node = new Node();
node.data = data;
node.behind = null;
if (size > 0) {
tail.behind = node;
tail = node;
size++;
}
else {
head = node;
tail = node;
size = 1;
}
}
public T poll() {
if (size > 0) {
T ret = head.data;
head = head.behind;
size--;
return ret;
}
return null;
}
public int size() {
return size;
}
public boolean contains(T data, boolean identity) {
Node current = head;
if (identity || data==null) {
while (current != null) {
if (current.data == data) return true;
current = current.behind;
}
return false;
}
while (current != null) {
if (current.data.equals(data)) return true;
current = current.behind;
}
return false;
}
public void remove(T data, boolean identity) {
Node current = head;
if (current == null || data == null) return;
if (identity) {
if (head.data == data) {
head = head.behind;
if (head == null) tail = null;
size--;
return;
}
while (current.behind != null) {
if (current.behind.data == data) {
current.behind = current.behind.behind;
if (current.behind == null) tail = current;
size--;
return;
}
current = current.behind;
}
return;
}
if (head.data.equals(data)) {
head = head.behind;
if (head == null) tail = null;
size--;
return;
}
while (current.behind != null) {
if (current.behind.data.equals(data)) {
current.behind = current.behind.behind;
if (current.behind == null) tail = current;
size--;
return;
}
current = current.behind;
}
}
public void clear() {
head = tail = null;
size = 0;
}
@Override
public String toString() {
String ret = "" + size;
Node current = head;
while (current != null) {
ret += "\t" + current.data.toString();
current = current.behind;
}
return ret;
}
private class Node {
public Node behind;
public T data;
}
}