Java 有关遍历、插入和删除节点的问题

Java 有关遍历、插入和删除节点的问题,java,nodes,next,Java,Nodes,Next,刚开始学习,我有几个问题。假设我有一个节点类,看起来像这样: private E number; private Node next; /** * Constructor */ Node(E e){ number = e; next = null; } 我有一系列链接节点,起始节点名为first,如下所示: 第一个->(1)->(2)->(3)->(5)->(6) 假设列表不是空的,为了遍历列表,我会这样

刚开始学习,我有几个问题。假设我有一个节点类,看起来像这样:

    private E number;
    private Node next;
    /**
     *  Constructor
     */
    Node(E e){
       number = e;
       next = null;
    }
我有一系列链接节点,起始节点名为first,如下所示:

第一个->(1)->(2)->(3)->(5)->(6)

假设列表不是空的,为了遍历列表,我会这样做:

Node curr = first;
while(curr != null){
    System.out.print(curr);
    curr = curr.next;
}
我知道你不能像这样向后遍历一个链接列表,所以这是否意味着每当我调用curr.next时,前面的元素就丢失了

我还想知道,我最初的列表是否会受到像curr这样的临时节点列表的影响?例如,如果要在列表中插入或删除一个节点,其代码与以下类似:

插入:

Node curr = first;
Node newNode = new Node(4);
while(curr != null){
    if(curr.number == 3){
        newNode.next = curr.next;
        curr.next = newNode;
    }
    curr = curr.next;
}
删除:

Node curr = first;
Node parent = first;
while(curr != null){
    if(curr.number == 3){
        parent.next = curr.next;
    }
    parent = curr;
    curr = curr.next;
}
上面的代码是先修改还是我必须设置
first=curr在插入或删除更改后?如果他们先修改,为什么
curr=curr.next不先修改吗?如果我想返回已删除的节点,该怎么办?我会做一些类似于curr.next=null的事情吗然后<代码>返回电流

这是否意味着每当我调用curr.next时,前面的元素都会丢失

当您向下遍历列表时,您从未修改过
第一个
,也从未修改过任何
节点
下一个
链接。因此,任何节点都不会真正丢失。以前访问过的节点访问起来就不那么方便了,因为您没有“句柄”,但是您总是可以通过从列表的开头(
第一个
)开始,然后按照
下一个
链接再次找到它们

我还想知道,我最初的列表是否会受到像curr这样的临时节点列表的影响

变量
first
不会受到任何影响,除非赋值语句在
=
的左侧有
first
。另一方面,
first
引用的列表可能会发生很大的变化,或者完全不受影响,这取决于您使用的
curr
,但是
first
本身只能通过为
first
指定一个新值来影响

上面的代码是先修改还是先设置first=curr


插入和删除代码(如给定)从不首先修改
。但是,如果它能够在当前第一个节点之前插入一个新节点,或者删除当前第一个节点,那么它应该这样做。可能不会特别使用
first=curr
,但肯定需要更新
first
,以反映列表的新标题。正如教科书上所说,“作为读者的练习”,我把它留给读者。

谢谢你的回答!我想我明白了<代码>第一个
将在任何引用它的内容被修改时更改;否则,我将不得不更新它,以便发生更改。