package Queue_Java; import java.util.*; public class LinkedQueue2{ private static class Node { private Object data; private Node next = null; private Node prev = null; private Node(Object dataItem, Node prevRef, Node nextRef) { data = dataItem; prev = prevRef; next = nextRef; } } //end of the private class Node private Node front=null; private Node rear=null; private int size=0; public Object offer(Object item) { if (front == null) { rear = new Node(item, null, null); front = rear; } else { rear.next = new Node(item, rear, null); //two steps: 1. construct a node object; 2. assignment rear = rear.next; } size++; return item; } public Object peek() { if (isEmpty()) return null; return front.data; } public Object poll() { Object item = peek(); if(item==null) return null; front = front.next; if(front != null) front.prev = null; size--; return item; } public Object element() { if (isEmpty()) throw new NoSuchElementException(); return front.data; } public Object remove() { Object item = element(); front = front.next; if(front != null) front.prev = null; size--; return item; } public boolean isEmpty() { return size == 0; } }