public class ListQueue {
    class Node {
        public String data;
        public Node next;
    }
    Node head = null, tail = null;
    public synchronized void enqueue(String data) {
        Node temp = new Node();
        temp.data = data;
        temp.next = null;
        if (tail == null) {
            tail = temp;
            head = tail;
        } else {
            tail.next = temp;
            tail = temp;
        }
        notify();
    }
    public synchronized String dequeue() {
        while (head == null)
            Util.myWait(this);
        String returnval = head.data;
        if (head == tail) tail = null;
        head = head.next;
        return returnval;
    }
}