gpt4 book ai didi

c++ - 链表拷贝构造函数C++

转载 作者:行者123 更新时间:2023-11-30 02:51:57 24 4
gpt4 key购买 nike

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

换句话说,当打印 head 时,只有第一个字符在那里,但如果我要遍历 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;
}
}
}
}

最佳答案

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

试试这个。

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 的附件。您只是在创建一个新节点,但什么也没做。

关于c++ - 链表拷贝构造函数C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19353640/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com