递归地列出两个列表之间的差异

时间:2019-07-17 20:35:35

标签: c list linked-list

我要进行的练习要求我给定两个列表(L1和L2),其中两个列表之间没有重复,创建一个仅包含L1元素的第三个列表。

我想解决该问题的第一种方法是获取列表L1的每个节点,并将其与整个列表L2进行比较,如果该节点不存在,则将其添加到我拥有的新列表中建立。 我的问题是我不知道如何处理此步骤。

我已经了解了演习的基本情况。如果L1为空,则返回NULL(例如)。如果L1不为空,但L2为空,那么我只需返回L1。

示例:

L1:15-> 13-> 2-> 3-> 70-> 100

l2:3-> 13-> 5-> 27-> 100-> 101

输出:

L3:15-> 2-> 70

这是我的尝试:

//struct
struct data 
{
  int d;
  struct data d;
};
typedef struct data Node;

//create the list
Node *creat_list() {

    Node *lis, *p, *last;
    int x;

    printf("\n Insert new data: ");
    scanf("%d", &x);

    if(x <= 0)
    {
        lis = NULL;
    }
    else
    {
        last = newnode();

        lis = last;
        last->d = x;
        last->next = NULL;

        printf(" Insert new data: ");
        scanf("%d", &x);

        while(x > 0)
        {
            p = newnode();
            p->d = x;
            p->next = NULL;
            last->next = p;
            last = p;
            printf(" Insert new data: ");
            scanf("%d", &x);

        }
    }
    return (lis);
}

Node *list_difference(Node *l1, Node *l2) {

    Node *l3;

    if (l1 == NULL) return NULL;

    if (l1 != NULL && l2 == NULL) return l1;

    if (l1 != NULL && l2 != NULL)
    {
        ...
        ...
    }
    return l3;
}

0 个答案:

没有答案