0
public CharList(CharList l) 
{
    // Whatever method your CharList provides to get the 
    // first node in the list goes here
    CharNode pt = l.head(); 

    // create a new head node for *this* list
    CharNode newNode = new CharNode();
    this.head = newNode;

    // Go through old list, copy data, create new nodes 
    // for this list.
    while(pt != null)
    {
        newNode.setCharacter(pt.getCharacter());
        pt = pt.getNext();
        if (pt != null)
        {
            newNode.setNext(new CharNode());
            newNode = newNode.getNext();
        }

    }
} 

好的,这是一个复制构造函数。我不太明白的是最后两行。

            newNode.setNext(new CharNode());
            newNode = newNode.getNext();

基本上,程序应该在一个节点内创建一个节点,以便它指向 LinkedList 的另一个元素。这就是第一行应该做的和正在做的;但是,不是在节点内部定义节点,而是 newNode = newNode.getNext(); 只是覆盖指向另一个节点的节点,使第一行无用。有什么我没有得到的吗?

pt = pt.getNext();

这行没问题,因为 pt 可以被覆盖,因为 pt 是我们作为属性传递的 LinkedList 中的一个元素,但其他两行对我来说没有意义。

4

1 回答 1

1

代码是正确的。它并没有覆盖它只是移动到下一个节点并设置它的值。

Step1 : Set next node using newNode.setNext(new CharNode());
Step2 : Move to next node using newNode = newNode.getNext();
Step 3 : Set value for next node newNode.setCharacter(pt.getCharacter());

希望澄清。

于 2013-03-31T15:26:23.727 回答