package ch1.sec3; import java.util.Iterator; public class LinkQueue implements Iterable { private Node head; private Node tail; private int size; @Override public LinkQueueIterator iterator() { return new LinkQueueIterator(); } public LinkQueue() { head = null; tail = null; size = 0; } public void enqueue(Item item) { if (isEmpty()) { head = new Node(item, null); tail = head; } else { tail.next = new Node(item, null); tail = tail.next; } size++; } public Item dequeue() { if (isEmpty()) { return null; } Item item = head.value; head = head.next; if (size() == 1) { tail = tail.next; } size--; return item; } public boolean isEmpty() { return size == 0; } public int size() { return size; } public static void main(String[] args) { LinkQueue linkQueue = new LinkQueue<>(); System.out.println(linkQueue.isEmpty()); linkQueue.enqueue(1); linkQueue.enqueue(2); linkQueue.enqueue(3); for (Integer i : linkQueue) { System.out.println(i); } System.out.println(linkQueue.size()); while (!linkQueue.isEmpty()) { System.out.println(linkQueue.dequeue()); } } private class Node { private Item value; private Node next; public Node(Item value, Node next) { this.value = value; this.next = next; } } private class LinkQueueIterator implements Iterator { private Node current; public LinkQueueIterator() { current = head; } @Override public boolean hasNext() { return current != null; } @Override public Item next() { Item item = current.value; current = current.next; return item; } } }