C 通过混合项目递归复制两个链表
我需要递归复制两个链表,并返回一个新的C 通过混合项目递归复制两个链表,c,linked-list,C,Linked List,我需要递归复制两个链表,并返回一个新的列表。我需要从列表1复制一个元素,从列表2复制一个元素。如果一个列表比另一个短,只需附加较长列表的其余元素 输入示例:list1=[1,2,3],list2=[4,5,6,7];结果=[1,4,2,5,3,6,7] 这是我的有缺陷(现在是正确的)代码: 有人能指出我犯的错误吗 编辑:现在可以了。我丢失了两个返回语句。您似乎在底部的两个else if分支中丢失了返回语句。您可以通过将其全部放在一个循环中来减少块数: node *copy_two_interla
列表
。我需要从列表1复制一个元素,从列表2复制一个元素。如果一个列表比另一个短,只需附加较长列表的其余元素
输入示例:list1=[1,2,3],list2=[4,5,6,7];结果=[1,4,2,5,3,6,7]代码>
这是我的有缺陷(现在是正确的)代码:
有人能指出我犯的错误吗
编辑:现在可以了。我丢失了两个返回语句。您似乎在底部的两个else if分支中丢失了返回语句。您可以通过将其全部放在一个循环中来减少块数:
node *copy_two_interlaced(node *list1, node *list2)
{
node *result=NULL, **pp = &result;
while (list1 || list2) {
if (list1) {
*pp = newnode();
(*pp)->data = list1->data;
(*pp)->next = NULL;
list1 = list1->next;
pp = &(*pp)->next;
}
if (list2) {
*pp = newnode();
(*pp)->data = list2->data;
(*pp)->next = NULL;
list2 = list2->next;
pp = &(*pp)->next;
}
}
return result;
}
哦,对不起,这不是递归的。下面是一个(非常难看的)递归版本:
node *copy_two_interlaced_recursive(node *list1, node *list2)
{
node *result=NULL;
if (list1) {
result = newnode();
result->data = list1->data;
result->next = copy_two_interlaced(list2, list1->next);
return result;
}
if (list2) {
result = copy_two_interlaced(list2, NULL);
}
}
return result;
}
它必须是递归的?不能是一个简单的颊,像一个为你准备的?
node *copy_two_interlaced_recursive(node *list1, node *list2)
{
node *result=NULL;
if (list1) {
result = newnode();
result->data = list1->data;
result->next = copy_two_interlaced(list2, list1->next);
return result;
}
if (list2) {
result = copy_two_interlaced(list2, NULL);
}
}
return result;
}