Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么仅仅更改此数据结构中的下一个节点还不够?_Java_Data Structures - Fatal编程技术网

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)