我只是在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;
}
}
答案 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。
我希望这对您有帮助