Java/实现LinkedList

Java/实现LinkedList,java,reference,insert,linked-list,Java,Reference,Insert,Linked List,我试图通过嵌入类来实现链表,但在将元素插入链表时遇到了问题。 为什么我的解决方案不起作用?我可以使用get()通过这种方式返回一个元素,但一旦迭代器到达目标,就无法插入一个元素 public void insert(int index, int value) { Node iterator = head; int i=0; while(iterator != null) { if(i++ == index) { iterat

我试图通过嵌入类来实现链表,但在将元素插入链表时遇到了问题。 为什么我的解决方案不起作用?我可以使用get()通过这种方式返回一个元素,但一旦迭代器到达目标,就无法插入一个元素

public void insert(int index, int value) {

    Node iterator = head;

    int i=0;
    while(iterator != null) {

        if(i++ == index) {

            iterator = new Node(value, iterator);
            return;

        } else {

            iterator = iterator.next;

        }   

    }       

}

您的
迭代器是此函数调用中的临时变量。当您将其引用重新指定给另一个对象时,实际上您并没有在此函数范围之外修改链表。您应该改为使用以下命令

if(i++ == index) {
    iterator.next = new Node(value, iterator);
    return;
}
注意
迭代器。下一步
,而不仅仅是重新分配迭代器。
通过这种方式,您将按照自己的意愿修改链表,而不仅仅是修改一个局部变量,一旦函数调用结束,该局部变量将超出范围。

您的
迭代器是此函数调用中的临时变量。当您将其引用重新指定给另一个对象时,实际上您并没有在此函数范围之外修改链表。您应该改为使用以下命令

if(i++ == index) {
    iterator.next = new Node(value, iterator);
    return;
}
注意
迭代器。下一步
,而不仅仅是重新分配迭代器。
通过这种方式,您将按照自己的意愿修改链表,而不仅仅是修改一个局部变量,一旦函数调用结束,这个局部变量就会超出范围。

它不起作用。例如,我添加1 2 3 4,然后插入(1,10)我的输出是:1,2,10,2…..你在打多个电话吗?或者只需一个
insert
调用,就会产生多个2秒和10秒。由于修改添加到iterator.next,您可能希望将if语句从
if(i++==index)
更改为
if(++i==index)
i使用与get(0…n)类似的“get”,并且只有一个insert()需要注意的一件事是在修改节点的
next
字段后缝合后面的节点。i、 e.将(1)添加到(0)->(2)中时,在将(0)的
next
修改到(0)->(1)之前,需要确保修改(1)到(1)->(2)的
next
。这样就不会丢失任何尾部节点。无论哪种方式,修改局部变量
迭代器
的原始问题在概念上都是最困难的部分。只要您拥有对实际对象的引用(LinkedList、PriorityQueue、HashMap),就可以使用该引用进入对象并修改它。关键的一点是,您不能修改对对象的本地引用
iterator
是对对象的本地引用,更改引用不会更改对象
iterator。接下来
或实际上是
iterator。{anything}
实际上修改了对象,而不是本地引用。这正是你想要的:)它不起作用。例如,我添加1 2 3 4,然后插入(1,10)我的输出是:1,2,10,2…..你在打多个电话吗?或者只需一个
insert
调用,就会产生多个2秒和10秒。由于修改添加到iterator.next,您可能希望将if语句从
if(i++==index)
更改为
if(++i==index)
i使用与get(0…n)类似的“get”,并且只有一个insert()需要注意的一件事是在修改节点的
next
字段后缝合后面的节点。i、 e.将(1)添加到(0)->(2)中时,在将(0)的
next
修改到(0)->(1)之前,需要确保修改(1)到(1)->(2)的
next
。这样就不会丢失任何尾部节点。无论哪种方式,修改局部变量
迭代器
的原始问题在概念上都是最困难的部分。只要您拥有对实际对象的引用(LinkedList、PriorityQueue、HashMap),就可以使用该引用进入对象并修改它。关键的一点是,您不能修改对对象的本地引用
iterator
是对对象的本地引用,更改引用不会更改对象
iterator。接下来
或实际上是
iterator。{anything}
实际上修改了对象,而不是本地引用。这正是你想要的:)