// Path: src/main/java/io/github/marioluan/datastructures/Node.java
// public class Node<T extends Comparable<T>> implements Comparable<Node<T>> {
// 
//     /**
//      * The value of the node.
//      */
//     public T data;
// 
//     /**
//      * A link to the next node.
//      */
//     public Node<T> next;
// 
//     /**
//      * A link to the previous node.
//      */
//     public Node<T> prev;
// 
//     /**
//      * Construct a new node with the given data.
//      * 
//      * @param data
//      */
//     public Node(T data) {
//         this.data = data;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public int compareTo(Node<T> that) {
//         return this.data.compareTo(that.data);
//     }
// 
//     /**
//      * Checks whether there is a link to next node.
//      * 
//      * @return whether the next field is not null
//      */
//     public boolean hasNext() {
//         return this.next != null;
//     }
// 
//     /**
//      * Checks whether there is a link to previous node.
//      * 
//      * @return whether the prev field is not null
//      */
//     public boolean hasPrev() {
//         return this.prev != null;
//     }
// 
// }


import io.github.marioluan.datastructures.Node;
import java.util.Iterator;
import java.util.NoSuchElementException;
package io.github.marioluan.datastructures.priority.queue;



/**
 * Implements an Iterator for a LinkedList data type.
 * 
 * @author marioluan
 * @param <T>
 *            the class type of the data from nodes
 */
public class LinkedListIterator<T extends Comparable<T>>
        implements Iterator<T> {
// Path: src/main/java/io/github/marioluan/datastructures/Node.java
// public class Node<T extends Comparable<T>> implements Comparable<Node<T>> {
// 
//     /**
//      * The value of the node.
//      */
//     public T data;
// 
//     /**
//      * A link to the next node.
//      */
//     public Node<T> next;
// 
//     /**
//      * A link to the previous node.
//      */
//     public Node<T> prev;
// 
//     /**
//      * Construct a new node with the given data.
//      * 
//      * @param data
//      */
//     public Node(T data) {
//         this.data = data;
//     }
// 
//     /**
//      * {@inheritDoc}
//      */
//     @Override
//     public int compareTo(Node<T> that) {
//         return this.data.compareTo(that.data);
//     }
// 
//     /**
//      * Checks whether there is a link to next node.
//      * 
//      * @return whether the next field is not null
//      */
//     public boolean hasNext() {
//         return this.next != null;
//     }
// 
//     /**
//      * Checks whether there is a link to previous node.
//      * 
//      * @return whether the prev field is not null
//      */
//     public boolean hasPrev() {
//         return this.prev != null;
//     }
// 
// }


// Path: src/main/java/io/github/marioluan/datastructures/priority/queue/LinkedListIterator.java
import io.github.marioluan.datastructures.Node;
import java.util.Iterator;
import java.util.NoSuchElementException;

package io.github.marioluan.datastructures.priority.queue;



/**
 * Implements an Iterator for a LinkedList data type.
 * 
 * @author marioluan
 * @param <T>
 *            the class type of the data from nodes
 */
public class LinkedListIterator<T extends Comparable<T>>
        implements Iterator<T> {
    private Node<T> cursor;