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
,以反映列表的新标题。正如教科书上所说,“作为读者的练习”,我把它留给读者。谢谢你的回答!我想我明白了<代码>第一个
将在任何引用它的内容被修改时更改;否则,我将不得不更新它,以便发生更改。