package qdatastructure;

public class Node {
    public String data;
    public Node next;

    public Node (String data) {
        this.data = data;
    }

    public Node(String data, Node next) {
        this.data = data;
        this.next = next;
    }
}

package qdatastructure;

public class QueueList {
    Node qBack;
    Node qFront;
    Node qNodeItem;

    public QueueList() {
        qFront = new Node(null, null);
        qBack = qFront;
        System.out.println("Queue Constructor");
    }

    public void push(String value) {
        //System.out.println("LList Add");
        if(qFront == qBack) {
            //System.out.println("LList Front == Back Empty List at this point");
            qFront.data = value;
            qBack = new Node(null);
            qFront.next = qBack;

        } else if(qBack.data == null) {
            //System.out.println("LList has a head but empty tail data");
            qBack.data = value;
            qBack.next = null;
        }
        else {
            //System.out.println("LList tail != head List has in place Head and Tail data values");
            qNodeItem = new Node(value, null);
            qBack.next = qNodeItem;
            qBack = qNodeItem;
        }
    }

    public void pop() {
        System.out.println("Pop");
        qNodeItem = qFront.next;
        qFront = qNodeItem;

    }
    public void print() {
        System.out.println("Queue Print List");
        Node p = qFront;
        System.out.print("Head->");
        while(p != null) {
            System.out.print(p.data + "->");
            p = p.next;
        }
        System.out.println("Tail.");
    }
}

package qdatastructure;

public class QLinkedListDemo {
    public static void main(String[] args) {
        QueueList qLinkedList = new QueueList();

        qLinkedList.push("Carmarthen");
        qLinkedList.push("Llanelli");
        qLinkedList.push("Swansea");
        qLinkedList.push("Neath");
        qLinkedList.push("Port Talbot");
        qLinkedList.push("Bridgend");
        qLinkedList.push("Cardiff");
        qLinkedList.push("Newport");
        qLinkedList.push("Bristol");
        qLinkedList.push("Swindon");
        qLinkedList.push("Reading");
        qLinkedList.push("London Paddington");
        qLinkedList.print();

        qLinkedList.pop();
        qLinkedList.pop();
        qLinkedList.print();
    }
}