如何防止参数冲突?
How to prevent conflicting parameters?
我得到了一个接受两个列表的函数。例如,list1 = [1, 2] 和 list2 = [3, 4],该函数将它们合并为 list1 = [1, 2, 3 ,4],而 list2 为空。但是现在,我试图让函数在接受同一个列表时什么都不做。例如,*a 和 *b 都作为 list1 传递。我该怎么做?
typedef struct node {
ElemType val;
struct node *next;
} NODE;
struct list_struct {
NODE *front;
NODE *back;
};
void merge(LIST *a, LIST *b) {
if (a->front != NULL || b->front != NULL) {
a->back->next = b->front;
a->back = b->back;
b->front = NULL;
}
}
只需检查参数并相应地执行操作,例如:
void merge(LIST *a, LIST *b) {
if (a == b) {
// do nothing, or whatever...
}
else
{
if (a->front != NULL || b->front != NULL) {
a->back->next = b->front;
a->back = b->back;
b->front = NULL;
}
}
}
但请注意:使用您的代码,a
将在合并后包含 b
中的所有元素,但如果您现在从 b
中删除元素,这些现在不存在的元素仍将存在被 a
引用,你遇到了问题。
IOW:你的 merge
函数可以工作,只要你从不从你合并的列表中删除元素。
你确定这是你想要的吗?
顺便说一句: 你忘记了 ytepdef
for LIST
:
typedef struct list_struct {
NODE *front;
NODE *back;
} LIST;
我得到了一个接受两个列表的函数。例如,list1 = [1, 2] 和 list2 = [3, 4],该函数将它们合并为 list1 = [1, 2, 3 ,4],而 list2 为空。但是现在,我试图让函数在接受同一个列表时什么都不做。例如,*a 和 *b 都作为 list1 传递。我该怎么做?
typedef struct node {
ElemType val;
struct node *next;
} NODE;
struct list_struct {
NODE *front;
NODE *back;
};
void merge(LIST *a, LIST *b) {
if (a->front != NULL || b->front != NULL) {
a->back->next = b->front;
a->back = b->back;
b->front = NULL;
}
}
只需检查参数并相应地执行操作,例如:
void merge(LIST *a, LIST *b) {
if (a == b) {
// do nothing, or whatever...
}
else
{
if (a->front != NULL || b->front != NULL) {
a->back->next = b->front;
a->back = b->back;
b->front = NULL;
}
}
}
但请注意:使用您的代码,a
将在合并后包含 b
中的所有元素,但如果您现在从 b
中删除元素,这些现在不存在的元素仍将存在被 a
引用,你遇到了问题。
IOW:你的 merge
函数可以工作,只要你从不从你合并的列表中删除元素。
你确定这是你想要的吗?
顺便说一句: 你忘记了 ytepdef
for LIST
:
typedef struct list_struct {
NODE *front;
NODE *back;
} LIST;