这是一个单链表实现的问题。
假设定义了一个类Node
。现在,对于操作,定义了另一个类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
,会发生什么?在这个问题上我没有说清楚
行后:
start = nptr;
变量start
持有引用到与nptr
相同的对象,即在:
Node nptr = new Node (value, null);
所以调用end = start
或end = nptr
并不重要,因为end
之后会包含相同的引用;nptr
, end
和start
都指向同一个对象
在这种情况下,应该只在第一次调用insertAtStart(int val)
时更新结束引用变量,以维护对结束节点的引用。
如果您将nptr
本身赋值给第1行中的end
,则end引用变量将具有对新添加节点的引用(这是列表的第一个节点)。