【发布时间】:2012-04-22 09:06:36
【问题描述】:
我需要实现一个名为 copyList 的辅助函数,它有一个参数,一个指向 ListNode 的指针。该函数需要返回一个指向原始链表副本的第一个节点的指针。因此,换句话说,我需要在 C++ 中编写一个函数,该函数采用链表的头节点并复制整个链表,返回指向新头节点的指针。我需要帮助来实现这个功能,这就是我现在所拥有的。
Listnode *SortedList::copyList(Listnode *L) {
Listnode *current = L; //holds the current node
Listnode *copy = new Listnode;
copy->next = NULL;
//traverses the list
while (current != NULL) {
*(copy->student) = *(current->student);
*(copy->next) = *(current->next);
copy = copy->next;
current = current->next;
}
return copy;
}
另外,这是我正在使用的 Listnode 结构:
struct Listnode {
Student *student;
Listnode *next;
};
注意:我在使用这个函数时遇到的另一个问题是返回一个指向局部变量的指针。
【问题讨论】:
-
+1 提出了一个很好的问题!第一个反问:你能通过分配一个节点来复制整个列表吗?第 2、3、...和第 n 个节点内容的副本将存储在哪里?
-
谢谢,我不确定我是否完全回答了您的问题,但我会尽力而为:-我应该创建一个全新的列表副本。因此,我无法复制标头节点,因为我复制的列表将包含相同的引用。我只想复制这些值。 - 此外,复制列表中的第一个 listnode 应该与原始列表中的第一个 listnode 具有相同的值。但是复制的列表不应引用/指向原始列表中的任何节点。
-
新列表不应该指向旧的任何一个节点,但新节点应该指向旧的内容吗?在这种情况下,“内容”是“学生”对象。基本上,你也在抄学生吗?问题中并不清楚。所以这两个列表可以指向同一个学生,但是是不同的列表,或者每个列表也可以“拥有”他们自己的学生副本。
-
不,链表的新(复制版本)中的任何内容都不应引用旧链表中的任何内容。也就是说,所有新的列表节点和 NO 指针指向内存中完全相同的学生或内存中的下一个。
-
由于这没有被标记为作业,省点麻烦,使用
std::list。它已经过测试,所以你可以在你现在使用调试的时候应用到其他东西,比如聚会。
标签: c++ linked-list