双重链表的奇怪复制构造函数

Strange copy constructor for a doubly linked list

本文关键字:复制 构造函数 链表      更新时间:2023-10-16

请注意我的作业标签。与所有作业一样,对于实际编码的直接答案,我们希望提供有用的建议。

你好,

我的教授给我们布置了一个双链表作为家庭作业,我一直避免寻求帮助,直到我真的需要它,而我在这里。

他为我们提供了头文件,然后我们必须为其创建一个类,而必须完全遵循头文件。他实现复制构造函数的方式是让我们编写一个助手函数,而复制构造函数只需要调用它。

在正常情况下,我可以很容易地做到这一点,但这次他给了我们一个非常奇怪的辅助函数签名:
// copys chain at oldHead to newHead.
static void copy(Elem *&newHead, const Elem *oldHead)

复制一个名为Elems的结构体链:

struct Elem 
{
    Information info;
    Elem *next;
    Elem *back;
};

我想我最困惑的是整个Elem *&因为,在我的记忆中,我没有& &;和*相互抵消?

谢谢,任何和所有的帮助是真的很感激!希望这将帮助其他人在我的位置在未来:)

static Elem* copy(const Elem *oldHead)

可能是一个势函数。获取旧的Head并返回新的克隆Head。

他选择的是通过引用传递指针。

如果只是

static void copy(Elem * newHead, const Elem *oldHead)
{
    newHead = new Elem();
}

类似上面的内容。对newHead的任何更改在函数外部都是不可见的。

与下同。X是按值传递的。在函数Addten返回后,对x的任何更改都将被忘记。你的x恰好是一个指针。

   void Addten( int x )
    {
       x = x + 10;
    }
    int x = 10;
    Addten( x );