莫得感情的代码。
package duilie; 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(){ this(null,null); } public String toString(){ return e.toString(); } } private Node head,tail;//head用来操作队头,tail用来操作队尾 private int size; public LinkedListQueue(){ head = null; tail = null; size = 0; } public int getSize() { return size; } public boolean isEmpty(){ return size==0; } public void enqueue(E e){ if(tail == null){//如果队列还没有元素,直接入队到队尾,并且队头也指向队尾 tail = new Node(e); head = tail; } else{ tail.next = new Node(e);//如果队尾有元素,将新元素添加进队列,队尾往后移 tail = tail.next; } size ++; } 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; } public E getFront(){ if(isEmpty()){ throw new IllegalArgumentException("cannot dequeue from an empty queue"); } return head.e; } 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(); } public static void main(String []arg){ LinkedListQueue<Integer> aq = new LinkedListQueue<>(); for(int i = 0;i < 10;i++){ aq.enqueue(i); System.out.println(aq); if(i % 3 == 2){ aq.dequeue(); System.out.println(aq); } } } }