2016-07-15 8 views
-1
/** 
* 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; 
     } 
} 

sagen ~~~~ Ich glaube, ich etwas über Referenzparameter bin hier fehlt ~~~~ kindly Hilfe .... Danke im Voraus :)Kompilierungsfehler „widersprüchliche Typen für‚Check‘“

+1

Head = head-> next wird nie aufgerufen (das ist nicht der Fehler) –

+1

Verschieben Sie die Implementierung von "check" über Ihre Implementierung von 'threeSum' oder erstellen Sie Ihre Funktion ordnungsgemäß. Wenn Ihr Compiler * Sie * nicht vor einer "impliziten Deklaration" der Funktion 'check' warnt, die' int' zurückgibt, müssen Sie Ihre Warnstufen auf pedantisch setzen. Sobald Sie die * real * -Deklaration für 'threeSum' verfügbar gemacht haben, sollte sich ein ganz anderer Fehler (Parametertypkonflikt) ergeben, aber das ist ein anderes Problem. – WhozCraig

Antwort

1

Gemäß der Definition von check() müssen Sie nur Werte nicht Zeiger an check() übergeben. Im Einklang

bool ans=check(&nums[i],&nums[j],&nums[k],head); 
//-------------^ 

& für nums[i] und andere entfernen.

bool check(int a,int b,int c,struct node* head) 

der

bool ans=check(&nums[i],&nums[j],&nums[k],head); 

falschen Aufruf ist:

0

den Prototyp check als gegeben. Es sollte (Drop die & s) sein:

bool ans=check(nums[i], nums[j], nums[k],head); 

Auch eine Erklärung von check liefern, bevor Sie es aus threeSum nennen.

bool check(int a,int b,int c,struct node* head); 

int** threeSum(int* nums, int numsSize, int* returnSize) { 
    ... 
} 

Andernfalls wird der Compiler Annahmen über Input-Typen machen und den Rückgabetyp von check.

+0

Immer noch der gleiche Fehler :(@RSahu Ich versuchte tatsächlich Ihre Option vor. –

+0

@aayushnigam, siehe die aktualisierte Antwort. –

+0

Danke @ RSahu ....... Ich vermisste die Deklarationsprüfung ... :) –