package com.hithomelabs.princeton1.module4; import javax.annotation.Nonnull; import java.util.Iterator; public class LinkedQueue extends Queue{ Node start = null; Node end = null; static private class Node{ E data; Node next; private Node(E element){ data=element; next=null; } } @Override public boolean isEmpty() { return start == null; } @Override public E dequeue() { if(isEmpty()) { return null; } E currentValue = start.data; start = start.next; return currentValue; } @Override public void enqueue(E element) { Node new_node = new Node(element); if(isEmpty()) start = new_node; else end.next = new_node; end = new_node; } @Override public int size() { int size = 0; Node sizePtr = start; while (sizePtr != null) { sizePtr = sizePtr.next; size++; } return size; } @Nonnull @Override public Iterator iterator() { return new LinkedQueueIterator(); } private class LinkedQueueIterator implements Iterator{ Node traversePtr = start; @Override public boolean hasNext() { return traversePtr != null; } @Override public E next() { E currentValue = traversePtr.data; traversePtr = traversePtr.next; return currentValue; } } }