不清楚为什么 "start" 是第 1 行的 assigned/gives 引用
Not clear why "start" is assigned/gives reference at line 1
这是单链表实现的问题
比如说,定义了一个classNode
。
现在,为操作定义了另一个 class LinkedList
。我们将在起始位置添加元素。
class LinkedList {
protected Node start;
protected Node end;
public int size;
public LinkedList() {
start = null;
end = null;
size = 0;
}
//method for insert at start
public void insertAtStart(int value) {
Node nptr = new Node (value, null);
size++;
if (start == null) {
start = nptr;
end = start; //Line 1
}
}
// others method(omitted here)
}
我在想,如果我们在第1行中将nptr
自身赋值给end
会怎么样?我在那个问题上不清楚。
在这种情况下,应仅在首次调用 insertAtStart(int val)
时更新结束引用变量,以维护对结束节点的引用。
如果您在第 1 行中将 nptr
本身分配给 end
,则结束引用变量将引用新添加的节点(即列表的第一个节点)。
这一行之后:
start = nptr;
变量 start
将 引用 保存到与 nptr
相同的对象,即在以下期间创建的对象:
Node nptr = new Node (value, null);
因此调用 end = start
或 end = nptr
并不重要,因为 end
之后将包含相同的引用; nptr
、end
和 start
都将指向同一个对象。
这是单链表实现的问题
比如说,定义了一个classNode
。
现在,为操作定义了另一个 class LinkedList
。我们将在起始位置添加元素。
class LinkedList {
protected Node start;
protected Node end;
public int size;
public LinkedList() {
start = null;
end = null;
size = 0;
}
//method for insert at start
public void insertAtStart(int value) {
Node nptr = new Node (value, null);
size++;
if (start == null) {
start = nptr;
end = start; //Line 1
}
}
// others method(omitted here)
}
我在想,如果我们在第1行中将nptr
自身赋值给end
会怎么样?我在那个问题上不清楚。
在这种情况下,应仅在首次调用 insertAtStart(int val)
时更新结束引用变量,以维护对结束节点的引用。
如果您在第 1 行中将 nptr
本身分配给 end
,则结束引用变量将引用新添加的节点(即列表的第一个节点)。
这一行之后:
start = nptr;
变量 start
将 引用 保存到与 nptr
相同的对象,即在以下期间创建的对象:
Node nptr = new Node (value, null);
因此调用 end = start
或 end = nptr
并不重要,因为 end
之后将包含相同的引用; nptr
、end
和 start
都将指向同一个对象。