public CarList(CarList cl)
{
if(cl == null) throw new NullPointerException();
if (cl.head == null)
head = null;
else
{
// Notice that you cannot issue head = cl.head; otherwise both heads will point at the passed list;
head = null;
// Now create and copy all the nodes in the list
CarNode temp, temp2, temp3;
temp = cl.head;
temp2 = null;
temp3 = null;
while(temp != null)
{
if (temp2 == null) // The case for the first node
{
temp2 = new CarNode(temp.getCar(), null);
head = temp2;
}
else
{
temp3 = new CarNode(temp.getCar(), null);
temp2.setNext(temp3);
temp2 = temp3;
}
temp = temp.getNext();
}
// Avoid privacy leak; set all temporary pointers to null
temp = temp2 = temp3 = null;
}
}
我不太明白循环的作用......我无法解析代码。隐私问题是由于临时变量保存地址吗?
答案 0 :(得分:1)
使用:
head = temp2;
您的代码会准确指出此处发生的事情。 CarList是一个表示单链表的类,其中列表的每个元素都包含在CarNode中,该CarNode包含该元素,以及指向列表中下一个元素的链接。
'head'变量指向列表中的第一个CarNode。有问题的while循环,虽然它的变量名称有问题,但只需将参数列表复制到正在实例化的列表中,为每个元素创建一个新的CarNode。通过它来看一个4元素的例子,你会看到它正在做什么。
查看“Lisp CAR功能”可以获得更多信息。 This page也有很多关于它的信息。