将项添加到队列的末尾

时间:2015-10-17 10:27:50

标签: java queue

如何抓住队列的头部并将项目添加到最后?

我制作了一个名为add的方法

add(Node<E> head, E item) {

}
class Node<E> {
    E item;
    Node<E> next;

    Node(E item, Node<E> next) {
        this.item = item;
        this.next = next;
    }
}

2 个答案:

答案 0 :(得分:1)

最后一个节点是没有下一个元素的节点,即next == null

的节点

给定节点head,然后可以遍历所有下一个元素,直到我们到达next == null的那个元素。因此,要在最后添加元素,请将当前最后一个元素的next变量设置为添加的元素,并将其next变量设置为null(以表示它是&#39;是新的最后一个元素。)

private static <E> void add(Node<E> head, E item) {
    Node<E> last = head;
    while (last.next != null) {
        last = last.next;
    }
    last.next = new Node<>(item, null);
}

测试代码:

public static void main(String[] args) throws Exception {
    Node<String> node = new Node<>("1", new Node<>("2", null));
    System.out.println(node); // prints 1 -> 2
    add(node, "3");
    System.out.println(node); // prints 1 -> 2 -> 3
}

添加toString()以下Node

class Node<E> {
    E item;
    Node<E> next;

    Node(E item, Node<E> next) {
        this.item = item;
        this.next = next;
    }

    @Override
    public String toString() {
        return item + (next == null ? "" : " -> " + next);
    }

}

答案 1 :(得分:0)

由于节点具有对其下一个节点的引用,因此您需要遍历它直到结束。

如果结尾为null,则可以使用while循环:

void add(Node<E> head, E item)
{
    // head.next == null means we reached the end
    while (head.next != null)
    {
        /*
         * Note that the "real" head is not changed by that, we just assign
         * a new value to head
         */
        head = head.next;
    }

    /*
     * the parameter head is now set to the last node, so we can set the
     * item
     */
    head.item = item;
    // or if you want to add an new node
    head.next = new Node<>(item, null);
}