-2

我正在做一个涉及链表的家庭作业。我们必须实现一个队列 ADT,而我遇到问题的一种方法是将一个节点添加到列表的末尾(入队方法)。这是我的代码:

公共类队列实现 QueueInterface {

    private Node head;
    private Node tail;
    private int sz;

    public  Queue() {
        head = null;
        tail = null;
        sz = 0;
    }

    public void enqueue(T newEntry) {
        Node newElement = new Node(newEntry);
        newElement.next = null;
        tail.next = newElement;
        tail = newElement;
    }

    public T dequeue() {
        T result = null;
        if(head != null) {
            result = head.data;
            head = head.next;
            sz--;
        }
        return result;
    }

    public T getFront() {
        return head.data;
    }

    public boolean isEmpty() {
        if (head == null) {
            return true;
        }
        return false;
    }

    public void clear() {
        while (!isEmpty()) {
            dequeue();
        }
    }

    @Override
    public String toString() {
        return "Queue [head=" + head + ", sz=" + sz + "]";
    }

    public class Node {

        private Node next;
        private T data;

        public Node (T newData) {
            data = newData;
        }

        @Override
        public String toString() {
            return "Node [next=" + next + ", data=" + data + "]";
        }

    }

}

如果有人可以帮助我解决这个问题,我将非常感激。谢谢你的时间!:)

4

4 回答 4

1

你不需要这一行,下一个应该已经是空的。

newElement.next = null;

您还忘记在入队后增加 sz 。

如果你尝试加入一个空链表会发生什么?你将不得不处理那个案子,这就是为什么你得到一个NullPointerException

于 2012-10-29T04:41:40.950 回答
1

您没有处理列表为空的情况。您正在添加第一项,tailnull并且您得到了适当的例外。

您需要在尝试使用它之前检查它是否存在,如果是这种情况,请采取适当的行动tailnull不要忘记设置head

于 2012-10-29T04:45:17.920 回答
1
public void enqueue(T newEntry) {
        Node newElement = new Node(newEntry);
        newElement.next = null;
        if(tail != null)
        {
        tail.next = newElement;
        tail = newElement;

        }else
        {
         head=tail=newElement;
        }
    }

检查tail是否为空。如果 tail 为空,则表示这是第一个节点。将此添加为第一个节点。在尾部之后添加。

于 2012-10-29T04:48:09.320 回答
0

您的 enqueue 方法尝试设置tail.nextnewElement. 如果尾部还没有被初始化会发生什么?你会得到一个 NullPointerException。

于 2012-10-29T04:41:55.960 回答