/** * 入队 * 我们需要对链表的尾部进行操作 * @param o */ @Override publicvoidenqueue(Object o){ //如果尾节点是空,说明队列中没有元素 if(tail == null){ tail = new Node((E)o); head = tail; }else { tail.next = new Node((E)o); tail = tail.next; } size++; }
@Override public E dequeue(){ if(isEmpty()){ thrownew IllegalArgumentException("队列为空,出队错误"); } Node delNode = head; head = head.next; delNode.next = null; //假如只有一个元素,我们删掉他之后,head指向空,但是tail还指向那个被删除的元素,所以置空tail if(head == null){ tail = null; } size--; return delNode.e; }
@Override public E getFront(){ if(isEmpty()){ thrownew IllegalArgumentException("队列为空,出队错误"); } return head.e; }
@Override public String toString(){ StringJoiner sj = new StringJoiner("->","Queue: Head [","] tail"); Node cur = head; while (cur!=null){ sj.add(cur.e+""); cur = cur.next; } return sj.toString(); } }