在Java中将节点添加到链接列表的末尾

时间:2012-10-29 04:35:26

标签: java linked-list queue

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

公共类Queue实现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 个答案:

答案 0 :(得分:1)

你不需要这一行,接下来应该是null。

newElement.next = null;

你入队后也忘了增加sz。

如果您尝试排队到空链表,会发生什么?你将不得不处理这个案子,这就是你得到NullPointerException

的原因

答案 1 :(得分:1)

您没有处理列表为空的情况。您正在添加第一个项,tailnull,您将获得相应的例外。

在尝试使用tail之前,您需要检查null是否head,如果是这种情况,请采取适当的行动。不要忘记设置{{1}}。

答案 2 :(得分: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是否为null。如果tail为null,则表示这是第一个节点。将其添加为第一个节点。在尾巴后添加。

答案 3 :(得分:0)

您的排队方法会尝试将tail.next设置为newElement。如果尾部尚未初始化会发生什么?你会得到一个NullPointerException。