/**
* Return an array of arrays of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
struct node{
char data[3];
struct node* next;
};
int** threeSum(int* nums, int numsSize, int* returnSize) {
int i,j,k;
struct node* head=NULL;
struct node* current=NULL;
struct node* temp=NULL;
for(i=0;i<numsSize-2;i++){
for(j=i+1;j<numsSize-1;j++){
for(k=j+1;k<numsSize;k++){
if((nums[i]+nums[j]+nums[k])==0){
**bool ans=check(&nums[i],&nums[j],&nums[k],head);**
if(ans==false){
temp=(struct node*)malloc(sizeof(struct node));
temp->data[0]=nums[i];
temp->data[1]=nums[j];
temp->data[2]=nums[k];
temp->next=NULL;
if(head==NULL){
head=temp;
current=head;
}
else{
current->next=temp;
current=temp;
}
}
else if(ans==true){
continue;
}
}
}
}
}
return head;
}
**bool check(int a,int b,int c,struct node* head){**
while(head!=NULL){
if(head->next[0]==a && head->next[1]==b && head->next[2]==c){
return false;
}
else{
return true;
}
head=head->next;
}
}
~~~~我觉得我在这里缺少一些参考参数~~~~ 亲切的帮助.... 提前谢谢你:)
答案 0 :(得分:1)
根据check()
的定义,您只需要传递值而不是check()
的指针。在行
bool ans=check(&nums[i],&nums[j],&nums[k],head);
//-------------^
删除&
和其他人的nums[i]
。
答案 1 :(得分:0)
鉴于check
的原型为:
bool check(int a,int b,int c,struct node* head)
电话
bool ans=check(&nums[i],&nums[j],&nums[k],head);
错了。它应该是(放弃&
s):
bool ans=check(nums[i], nums[j], nums[k],head);
另外,在您从check
调用之前提供threeSum
声明。
bool check(int a,int b,int c,struct node* head);
int** threeSum(int* nums, int numsSize, int* returnSize) {
...
}
否则,编译器将对输入类型和check
的返回类型进行假设。