这是我书中的一个例子。在我看来,当你用这个类创建一个列表时,你创建了两个对象(first
和last
,它们都是null)。当你在add方法中放入第一个和最后一个“Node”对象时,我无法弄清楚为什么。设置first = n
和last = n
时,不应创建两个元素。例如,如果我致电list.add(2)
,那么first
和last
现在不应该都是2吗?
public class List {
private Node first = null;
private Node last = null;
public List(){
first = null;
last = null;
}
private static class Node{
public int value;
public Node next;
public Node ( int value, Node next){
this.value = value;
this.next = next;
}
}
public void add (int value){
Node n = new Node (value,null);
if(first==null){
first = n;
last = n;
}else{
last.next = n;
last = n;
}
}
public int size(){
int number = 0;
Node n = first;
while(n != null){
number++;
n = n.next;
}
return number;
}
}
答案 0 :(得分:3)
正如我所看到的,当你用这个类创建一个列表时,你创建了两个对象(first和last,它们都是null)。
那不是真的。 first
和last
不是对象,而是引用到对象。在这种情况下,它们以 null 引用开头,这意味着它们根本不引用任何对象。
当您编写first = n; last = n;
时,您将first
和last
设置为引用同一个对象 - 无论n
指向哪个对象。
例如,如果list.add(2),现在不应该是第一个和最后一个是2?
是的,他们都会引用Node
为value
的{{1}}实例。
答案 1 :(得分:0)
是的,我看到第一个和最后一个是必需的。如果您已经出列(先删除)或搜索(我想可以从最后而不是在开始时进行,简单的线性搜索的相同过程),可能稍后会更有用。
至于你的问题。是,如果你开始使用空白列表并说list.add(2)。 first和last都将指向具有值2的节点。这是因为列表中的第一个元素和最后一个元素是相同的,因此列表中有1个元素。它的第一个和最后一个(如果你想变得奇怪,那就是中间)。
但如果你做了list.add(1),则列表.add(2)。你会得到first = node.value == 1和second = node.value == 2