此函数的目的是用于C库中的qsort函数。只有当两个集合具有相同数量的元素时,下面的函数才有效。但是,如果其中一个集合的元素少于另一个集合(并且值连续匹配),则我的函数似乎进入分割错误。我认为原因是我递归地调用了下一个节点,而下一个节点有可能是空的。
int cmp(const void *a, const void *b){
Node *pa = (Node*)a;
Node *pb = (Node*)b;
if (pa->val == pb->val)
cmp( pa->next, pb->next );
else if (pa->val < pb->val)
return -1;
else
return 1;
return 0; // placeholder
}
但是我可能是错的,上面的函数是正确的吗?
您根本没有检查节点是否为NULL。您必须在函数开始时检查它。
if(pa == NULL || pb == NULL)
return 0;