Java 为什么仅仅更改此数据结构中的下一个节点还不够?
在下面的数据结构中Java 为什么仅仅更改此数据结构中的下一个节点还不够?,java,data-structures,Java,Data Structures,在下面的数据结构中 public class ListNode<T> { T data; ListNode<T> nextNode; ListNode(T object) { this(object, null); } ListNode(T object, ListNode<T> node) { data = object; nextNode = node; }
public class ListNode<T> {
T data;
ListNode<T> nextNode;
ListNode(T object) {
this(object, null);
}
ListNode(T object, ListNode<T> node) {
data = object;
nextNode = node;
}
public T getData() {
return data;
}
public ListNode<T> getNextNode() {
return nextNode;
}
}
公共类ListNode{
T数据;
listnodenextnode;
ListNode(T对象){
这个(object,null);
}
ListNode(T对象,ListNode节点){
数据=对象;
nextNode=节点;
}
公共T getData(){
返回数据;
}
公共ListNode getNextNode(){
返回下一个节点;
}
}
公共类列表{
私有ListNode firstNode;
私有ListNode lastNode;
私有字符串名称;
公开名单(){
本(“名单”);
}
公共列表(字符串列表名){
名称=列表名称;
firstNode=lastNode=null;
}
公共空白插入项前面(T插入项){
如果(isEmpty())firstNode=lastNode=newlistnode(insertItem);
else firstNode=新列表节点(插入项,firstNode);
}
public void insertback(T insertItem){
如果(isEmpty())firstNode=lastNode=newlistnode(insertItem,null);
else lastNode=lastNode.nextNode=new ListNode(插入项)
}
}
为什么仅仅做到这一点还不够
else lastNode.nextNode = new ListNode<T>(insertItem)
else lastNode.nextNode=new ListNode(插入项)
在InsertBack方法中?(我也不确定java中的
a=b=c=something
是什么意思。)仅仅做到这一点是不够的:
else lastNode.nextNode = new ListNode<T>(insertItem)
else lastNode.nextNode=new ListNode(插入项)
因为列表
需要跟踪其第一个和最后一个节点。在后面插入时,必须更新lastNode
,否则lastNode
将引用“旧的”最后一个节点,现在是倒数第二个
如果列表最初为空,则第一个或最后一个节点均未设置为任何值;它们必须初始化
a=b=c=something
语法将最后一个值/表达式分配给所有非最后一个变量,从右向左关联,例如something
被分配给c
,然后b
,然后a
所有归功于@rgetman,我将为自己和读者添加一个说明:
因为如果这样做,
lastNode
将不会是最后一个节点。但是lastNode.nextNode不应该总是指向null吗?我的意思是,在本例中,lastNode.nextNode指向lastNode。这看起来有点奇怪。这就是为什么多重=
的顺序很重要的原因。执行lastNode.nextNode=
时,lastNode
仍然是“旧的”最后一个节点,因此旧的最后一个节点指向新节点。然后执行lastNode=
,将lastNode
更新到新节点。在不使用复合赋值的情况下重写它可能更清晰。
else lastNode.nextNode = new ListNode<T>(insertItem)