c-如何防止参数冲突



我得到了一个函数,它包含两个列表。例如,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函数就可以工作。

你确定这是你想要的吗?

BTW:您忘记了LIST:的ytepdef

typedef struct list_struct {
NODE *front;
NODE *back;
} LIST;

相关内容

  • 没有找到相关文章

最新更新