如何在C语言中复制链表?
这是我复制列表的功能。错误在于它总是复制第一个元素两次。我做错了什么如何在C语言中复制链表?,c,struct,linked-list,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)
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;
}
这些行不可能是正确的:
p = p->next;
p = malloc(sizeof(Node));
这将设置一个新值p
,然后将其覆盖
我建议您将新节点的
malloc
放入while
循环中。您还需要将p->next
设置为分配后的某个值,并保留指向分配的第一个新节点的指针。这些行不能正确:
p = p->next;
p = malloc(sizeof(Node));
这将设置一个新值p
,然后将其覆盖
我建议您将新节点的
malloc
放入while
循环中。您还需要将p->next
设置为分配后的某个值,并保留指向分配的第一个新节点的指针。这些行不能正确:
p = p->next;
p = malloc(sizeof(Node));
这将设置一个新值p
,然后将其覆盖
我建议您将新节点的
malloc
放入while
循环中。您还需要将p->next
设置为分配后的某个值,并保留指向分配的第一个新节点的指针。这些行不能正确:
p = p->next;
p = malloc(sizeof(Node));
这将设置一个新值p
,然后将其覆盖
我建议您将新节点的malloc
放入while
循环中。您还需要将p->next
设置为分配后的某个值,并保留指向分配的第一个新节点的指针。如何:
Node *copy(Node *list) {
Node *newlist, *p, *prev;
newlist = p = NULL;
while (list != NULL) {
p = malloc(sizeof(*p));
strcpy(p->airport, list->airport);
if (!newlist)
newlist = p;
else
prev->next = p;
prev = p;
list = list->next;
}
prev->next = NULL;
return newlist;
}
您需要保留对上一个节点的引用,以便在下一次迭代中更新其下一个节点。如何:
Node *copy(Node *list) {
Node *newlist, *p, *prev;
newlist = p = NULL;
while (list != NULL) {
p = malloc(sizeof(*p));
strcpy(p->airport, list->airport);
if (!newlist)
newlist = p;
else
prev->next = p;
prev = p;
list = list->next;
}
prev->next = NULL;
return newlist;
}
您需要保留对上一个节点的引用,以便在下一次迭代中更新其下一个节点。如何:
Node *copy(Node *list) {
Node *newlist, *p, *prev;
newlist = p = NULL;
while (list != NULL) {
p = malloc(sizeof(*p));
strcpy(p->airport, list->airport);
if (!newlist)
newlist = p;
else
prev->next = p;
prev = p;
list = list->next;
}
prev->next = NULL;
return newlist;
}
您需要保留对上一个节点的引用,以便在下一次迭代中更新其下一个节点。如何:
Node *copy(Node *list) {
Node *newlist, *p, *prev;
newlist = p = NULL;
while (list != NULL) {
p = malloc(sizeof(*p));
strcpy(p->airport, list->airport);
if (!newlist)
newlist = p;
else
prev->next = p;
prev = p;
list = list->next;
}
prev->next = NULL;
return newlist;
}
您需要保留对上一个节点的引用,以便在下一次迭代中更新其下一个节点。只需更改这些行的顺序即可
p = p->next;
p = malloc(sizeof(Node));
到
只需更改这些行的顺序
p = p->next;
p = malloc(sizeof(Node));
到
只需更改这些行的顺序
p = p->next;
p = malloc(sizeof(Node));
到
只需更改这些行的顺序
p = p->next;
p = malloc(sizeof(Node));
到
把它分成三部分
// 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.
把它分成三部分
// 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.
把它分成三部分
// 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.
把它分成三部分
// 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.
不,事实上你错了。因为他有p的第一个元素地址,保存在newlist上,并在while之外分配,所以他可以使用p本身来分配下一个元素。它只需要改变事情的顺序:p->next=malloc(sizeof(Node));p=p->next@好吧,从技术上来说,答案并没有错。OP的代码是。如前所述,这两句话毫无意义。不,事实上你错了。因为他有p的第一个元素地址,保存在newlist上,并在while之外分配,所以他可以使用p本身来分配下一个元素。它只需要改变事情的顺序:p->next=malloc(sizeof(Node));p=p->next@好吧,从技术上来说,答案并没有错。OP的代码是。如前所述,这两句话毫无意义。不,事实上你错了。因为他有p的第一个元素地址,保存在newlist上,并在while之外分配,所以他可以使用p本身来分配下一个元素。它只需要改变事情的顺序:p->next=malloc(sizeof(Node));p=p->next@好吧,从技术上来说,答案并没有错。OP的代码是。如前所述,这两句话毫无意义。不,事实上你错了。因为他有p的第一个元素地址,保存在newlist上,并在while之外分配,所以他可以使用p本身来分配下一个元素。它只需要改变事情的顺序:p->next=malloc(sizeof(Node));p=p->next@好吧,从技术上来说,答案并没有错。OP的代码是。如前所述,这两行毫无意义。这已经是今天关于复制链表的第三个问题了。甚至符号名称也是相同的。此网站的名称不是www.domyhomework.com!!这已经是今天关于复制链接列表的第三个问题。甚至符号名称也是相同的。此网站的名称不是www.domyhomework.com!!这已经是今天关于复制链接列表的第三个问题。甚至符号名称也是相同的。此网站的名称不是www.domyhomework.com!!这已经是今天关于复制链接列表的第三个问题。甚至符号名称也是相同的。此网站的名称不是www.domyhomework.com!!其他答案与这个答案相比非常混乱。其他答案与这个答案相比非常混乱。其他答案与这个答案相比非常混乱。其他答案与这个答案相比非常混乱。你是在误导。他将为头部节点分配两次内存,这是不必要的。实际上不是@lekroif,我要求他更改指令顺序。你是在误导。他将为头部节点分配两次内存,这是不必要的。实际上不是@lekroif,我要求他更改指令顺序。你是在误导。他将为头部节点分配两次内存,这是不必要的。实际上不是@lekroif,我要求他更改指令顺序。你是在误导。他将为头部节点分配两次内存,这是不必要的。实际上不是@lekroif,我要求他更改指令顺序。