Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通过混合项目递归复制两个链表_C_Linked List - Fatal编程技术网

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