复制链接列表并返回指向新列表的指针

我目前的结构是:

typedef char AirportCode[4]; typedef struct node{ AirportCode airport; struct node *next; }Node; 

关于函数应该如何启动的想法是这样的:

 Node *copy(Node *list) { int count = 0; while (list != NULL){ count++; list = list->next; } } 

现在我们知道原始列表有多长,但我之所以难以理解是因为我不知道如何为每个我们必须复制到第二个列表的单个节点分别分配内存。

您使用malloc分配一个新节点:

 Node* newNode = malloc(sizeof(Node)); 

然后你可以用你的新节点更改内容

 newNode->airport =  newNode->next =  

如果使用循环,可能更容易使用递归而不是循环进行克隆,除非您喜欢执行大量指针操作并一次跟踪多个节点(类似于反转链接列表 ),使用堆。

所以它会是这样的:

 Node* cloneList(Node* head){ if (!head) return NULL;//done Node* n = malloc(sizeof(Node)); n->airport = head->airport; n->next = cloneList(head->next); return n; } 

我没有测试过,但这应该做的工作:

 Node *copy(Node *list) { int count = 0; Node *previous = NULL ; Node *firstnode = NULL ; while (list != NULL){ Node *newnode = malloc(sizeof(node)) ; if (firstnode == NULL) firstnode = newnode ; memcopy(newnode, list, sizeof(Node)) ; newnode->next = NULL ; if (previous != NULL) previous->next = newnode ; previous = newnode ; count++; list = list->next; } return firstnode ; }