c - 如何在 C 中复制链表?

标签 c struct linked-list

这是我复制列表的功能。错误是它总是复制第一个元素两次。我究竟做错了什么?

Node *copy(Node *list) {

  Node *newlist, *p;

  p = malloc(sizeof(Node));
  newlist = p;

  while (list != NULL) {
      strcpy(p->airport, list->airport);
      p = p->next;
      p = malloc(sizeof(Node));
      list = list->next;
  }

  return newlist;
}

最佳答案

将其分成 3 个部分。

// Part 1 - the null list
if (list == NULL) return NULL;

// Part 2 - the head element
Node *newHead = malloc(sizeof(Node));
strcpy(newHead->airport, list->airport);

// Part 3 - the rest of the list
Node *p = newHead;
list = list->next;
while(list != NULL) {
    p->next = malloc(sizeof(Node);
    p=p->next;
    strcpy(p->airport, list->airport);
    list = list->next;
}
p->next = NULL;  // terminate last element.

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

相关文章:

c++ - 如何让 gcc 为所有符号名称添加前缀

C 程序在循环中调用包含字符串的数组

c - typedef时重命名变量?

c - 图像转换 - 无法从另一个结构中访问元素

java - 链表中的节点类,特别是构造函数,并使用它来创建随机整数的链表

c - 打印指向结构体的指针的二维数组

c - 从 void* 到 int 的类型转换,反之亦然

c++ - 动态更改指向结构的指针数组的数据类型

c++ - 检查两个单链表是否包含相同的数据

c++ - Bool 排序插入函数,检查 int 是否已存在于列表中