import edu.princeton.cs.algs4.StdOut;
public class GeneralizedQueue<Item> {
public static void main(String[]args){
GeneralizedQueue<Integer> queue=new GeneralizedQueue<>();
for (int i=1;i<10;i++)
queue.insert(i);
StdOut.println(queue.delete(9));
StdOut.println(queue.delete(5));
StdOut.println(queue.delete(1));
}
private Node first;
private Node last;
private int N;
private class Node{
Item item;
Node next;
}
public GeneralizedQueue(){
first=null;
last=null;
N=0;
}
public boolean isEmpty(){return first==null;}
public void insert(Item x){
Node newlast=new Node();
newlast.item=x;
if (isEmpty()){
first=newlast;
last=newlast;
}
else {
last.next=newlast;
last=newlast;
}
N++;
}
public Item delete(int k){
if (k>N||k<1||first==null) return null;
Item item;
if (first==last){
item=first.item;
first=null;
last=null;
}
else {
Node current=first;
if (k==1){
item=first.item;
first=first.next;
}
else {
for (int i=1;i<k-1;i++)//find k-1 Node
current=current.next;
item=current.next.item;
current.next=current.next.next;
}
}
return item;
}
}