我写了一个复制链表的函数。不幸的是,它没有完全复制列表。
Node *copy(Node *list)
{
Node *copy2;
while(list != NULL) {
copy2 = malloc(sizeof(Node));
memcpy(copy2,list,sizeof(Node));
list = list->next;
if(list != NULL) {
copy2->next = malloc(sizeof(Node));
copy2 = copy2->next;
}
}
return copy2;
}
答案 0 :(得分:2)
你有2个主要错误:
您不存储复制列表的头部。无处不在。当你返回copy2
时,你会返回一个指向列表最后一个元素的指针,并永远失去对列表头的引用。
copy2
未动态分配,并在您的函数退出时将被释放。如果您修复问题1,这可能会导致分段错误。
答案 1 :(得分:2)
它只给你最后一个元素,它也有很多内存泄漏。
试试这个。
Node *copy(Node *list)
{
Node *newList = NULL;
Node **newIt = &newList;
while(list!=NULL)
{
*newIt = malloc(sizeof(Node));
memcpy(*newIt,list,sizeof(Node));
list = list->next;
newIt = &((*newIt)->next);
}
return newList;
}
答案 2 :(得分:0)
这是用于将链表复制到另一个链表的C ++代码
struct Node {
int value;
Node* next;
};
Node* copy(Node* list) {
if (list == NULL) return NULL;
Node* result = new Node;
result->value = list->value;
result->next = copy(list->next);
return result;
}