[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PlRg0Ncr-1610469237605)(7F98D99916094B9DB393F88FD15C1E65)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uZd63k97-1610469237611)(9F30BF730F9D4DB89FC33CC2B04FB321)]
【实现】
public class LinkedListQueue<E> implements Queue<E> {
private class Node{
public E e;
public Node next;
public Node(E e,Node next){
this.e = e;
this.next = next;
}
public Node(E e){
this(e,null);
}
public Node() {
}
@Override
public String toString() {
return e.toString();
}
}
private Node head,tail;
private int size;
public LinkedListQueue(){
head = null;
tail = null;
size = 0;
}
@Override
public void enqueue(E e) {
if(tail == null){
tail = new Node(e);
head = tail;
}else{
tail.next = new Node(e);
tail = tail.next;
}
size++;
}
@Override
public E dequeue() {
if(isEmpty()){
throw new IllegalArgumentException("Cannot dequeue from an empty queue");
}
Node retNode = head;
head = head.next;
retNode.next = null;
if(head == null){
tail = null;
}
size--;
return retNode.e;
}
@Override
public E getFront() {
if(isEmpty()){
throw new IllegalArgumentException("Cannot get from an empty queue");
}
return head.e;
}
@Override
public int getSize() {
return size;
}
@Override
public boolean isEmpty() {
return size == 0;
}
@Override
public String toString(){
StringBuilder res = new StringBuilder();
res.append("Queue: front ");
Node cur = head;
while(cur != null){
res.append(cur + "->");
cur = cur.next;
}
res.append("NULL tail");
return res.toString();
}
}