我要进行的练习要求我给定两个列表(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;
}