如何防止参数冲突?

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;