1

我真的很困惑为什么这个复制构造函数不起作用!我正在创建一个iter指向与 相同的 ListNode的指针head,但是当我将内容从 复制s到 时ithead并且iter没有连接!

换句话说,当打印头时,只有第一个字符在那里,但如果我要遍历iter,列表的其余部分就在那里。为什么不是iterhead指向同一个对象?!

注意:这是一个用于实现名为 MyString 的类的链表。

struct ListNode {
    char info;
    ListNode *next;
    ListNode () : info('0'), next(0) {}
    ListNode (char c) : info (c), next(0) {}
};

class MyString {
    private:
    ListNode *head;

    MyString::MyString(const MyString & s) {
        if (s.head == 0)
            head = 0;
        else {
            head = new ListNode (s.head -> info);
            ++NumAllocations;
            ListNode *iter = head;
            for (ListNode *ptr = s.head -> next; ptr != 0; ptr = ptr ->next) {
                iter = iter -> next;
                iter = new ListNode (ptr -> info);
                ++NumAllocations;
            }
        }
    }
}
4

1 回答 1

3

您似乎没有将列表附加到任何地方的头部。

尝试这个。

MyString::MyString( const MyString & s ) {
    if ( s.head == 0)
        head = 0;
    else {
        head = new ListNode (s.head -> info);
        ++ NumAllocations;
        ListNode *iter = head;
        for (ListNode *ptr = s.head -> next; ptr != 0; ptr = ptr ->next) {
            iter -> next = new ListNode (ptr -> info);
            iter = iter -> next;
            ++ NumAllocations;
        }
        printList(head);
    }
}

注意iter->next的附件。您只是在创建一个新节点,而对它什么都不做。

于 2013-10-14T04:47:20.110 回答