在 C 中复制链表

标签 c linked-list

我写了一个复制链表的函数。不幸的是,它没有完全复制列表。

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;
}

最佳答案

它只给你最后一个元素,它也有很多内存泄漏。

  1. 您不需要为每个元素分配两个 malloc。
  2. 你需要在列表的头部和当前复制的元素中保持引用
  3. 您需要保留指向引用的指针以更改前一个节点内的指针。

试试这个。

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;
}

关于在 C 中复制链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22222156/

相关文章:

c - 如何对姓名链接列表进行冒泡排序?

c - 使用链表读取输入,如何开始

c - 如何解决这个: two functions x = sin(x)/a

c - 使用 c 数组时堆栈溢出

c++ - 数值结果超出范围

c++ - 用户代码可以安全地使用结构填充吗?

c - 在C编程中需要将每个3个矩阵中的3个最大数字放入1个单矩阵中

javascript - NodeJs 需要错误

c - 与左节点比较后删除节点

Java:如何遍历类型链接列表的数组并将它们附加到数组