请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

dummyHead 和 dummyTail 就不需要做那么多判断了

使用 dummyHead 和 dummyTail,就不需要那么多判断了,直接如下就好了

 @Override
    public void enqueue(E e) {
        dummyTail.next = new Node(e);
        dummyTail = dummyTail.next; 
        size++;
    }

    @Override
    public E dequeue() {
        Node curr = dummyHead.next;
        dummyHead.next = curr.next;
        curr.next = null;
        size--;
        return curr.e;
    }

话不多说,代码奉上

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);
        }

        @Override
        public String toString() {
            return e.toString();
        }
    }

    private Node dummyHead;
    private Node dummyTail;
    private int size;

    public LinkedListQueue() {
        dummyHead = dummyTail = new Node(null, null);
        size = 0;
    }

    @Override
    public int getSize() {
        return size;
    }

    @Override
    public boolean isEmpty() {
        return size == 0;
    }

    @Override
    public void enqueue(E e) {
        dummyTail.next = new Node(e);
        dummyTail = dummyTail.next;
        size++;
    }

    @Override
    public E dequeue() {
        Node curr = dummyHead.next;
        dummyHead.next = curr.next;
        curr.next = null;
        size--;
        return curr.e;
    }

    @Override
    public E getFront() {
        Node curr = dummyHead.next;
        return curr.e;
    }

    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();
        res.append("Queue: front ");
        Node curr = dummyHead.next;
        while (curr != null) {
            res.append(curr + "->");
            curr = curr.next;
        }
        res.append("NULL tail");
        return res.toString();
    }

    public static void main(String[] args) {
        LinkedListQueue<Integer> queue = new LinkedListQueue<>();
        for(int i = 0; i < 10; i++) {
            queue.enqueue(i);
            System.out.println(queue);

            if (i % 3 == 2) {
                queue.dequeue();
                System.out.println(queue);
            }
        }

    }
}

正在回答 回答被采纳积分+3

2回答

qq_慕神7027777 2021-01-08 19:55:10

我看代码好像貌似:虚拟头节点起作用了;虚拟尾节点就是指向链表的最后一个节点。

0 回复 有任何疑惑可以回复我~
  • 我也这个感觉,感觉可以直接叫Tail。虽然变量名称不重要
    回复 有任何疑惑可以回复我~ 2021-07-25 13:41:49
liuyubobobo 2020-10-09 23:13:24

感谢分享。继续加油!:)

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号