如果不使用,我们为什么要在循环中指定一个值?

时间:2013-04-12 01:45:56

标签: java linked-list copy-constructor

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;
    }
}

我不太明白循环的作用......我无法解析代码。隐私问题是由于临时变量保存地址吗?

1 个答案:

答案 0 :(得分:1)

使用:

    head = temp2;

您的代码会准确指出此处发生的事情。 CarList是一个表示单链表的类,其中列表的每个元素都包含在CarNode中,该CarNode包含该元素,以及指向列表中下一个元素的链接。

'head'变量指向列表中的第一个CarNode。有问题的while循环,虽然它的变量名称有问题,但只需将参数列表复制到正在实例化的列表中,为每个元素创建一个新的CarNode。通过它来看一个4元素的例子,你会看到它正在做什么。

查看“Lisp CAR功能”可以获得更多信息。 This page也有很多关于它的信息。