为什么LinkedList中的add()方法不起作用?

时间:2018-10-09 03:37:43

标签: java linked-list

我只是在add()中实现了Linkedlist方法,但实际上并没有用。我认为“当前=新的Node(node.data);”使对象指向一个新对象,而不是更新原始对象,但我不知道如何解决。有什么方法可以正确更新此节点?请帮忙,谢谢。

class Node{
    int data;
    Node next; 
    Node(int data){
        this.data = data;
        this.next = null;
    }
    Node(int data, Node next){
        this.data = data;
        this.next = next;
    }
}
class LinkedList{
    protected Node head;
    protected int size;
    LinkedList(){};

    void add(int data)
    {
        Node node = new Node(data);
        if (head == null) {
            head = node;
        }else {
            Node current = head;
            while(current != null) {
                current = current.next;
            }
            current = new Node(node.data);
        }
        size++;
    }
    public int getSize() {
        return size;
    }
    public String toString()
    {
        Node current = head;
        String result = "";
        while(current != null) {    
            result += current.data +"->";
            current = current.next;
        }
        return result;
    }
}

2 个答案:

答案 0 :(得分:1)

您快到了。您的问题就在这里

while(current != null) {
... }

current = new Node(node.data);

这将创建一个新节点,该节点应位于列表的末端。但是,您只将新实例分配给 local 变量...,该变量然后会丢失,因为方法结束了。

相反,您必须更改循环,直到找到不为空的 last 条目为止,以便找到current.next == null。然后只需:

current.next = new Node(node.data);

答案 1 :(得分:0)

在LinkedList中,每个说话的值被添加到顶部。这不像添加到数组中。因此,当您添加新的Node时,无需尝试将其添加到末尾,只需将其添加为新的head元素即可。

这很容易:

public void add(T item) {

    Node<T> next = new Node<>(item, head);
    this.head = next;
    size++;

}

如果要将LinkedList限制为仅int,则可以将T替换为int。

我希望这对您有帮助