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