/ / Le contrôle atteint la fin de la fonction non-vide [fermé] - c ++

Le contrôle atteint la fin de la fonction non-vide [fermé] - c ++

Je pose une question sur Hackerrank, mais chaque fois que je compile mon code, il montre que le contrôle atteint à la fin de la fonction non-vide. Voici mon code source:

   /*
Compare two linked lists A and B
Return 1 if they are identical and 0 if they are not.
Node is defined as
struct Node
{
int data;
struct Node *next;
}
*/
int CompareLists(Node *headA, Node* headB)
{

if(headA==NULL&&headB==NULL)
{
return 1;
}
else if( headA!=NULL&&headB!=NULL)
{
while(headA!=NULL&&headB!=NULL)
{
if(headA->data==headB->data)
{
headA=headA->next;
headB=headB->next;
}
else
{
return 0;
exit (0);
}
return 1;
}
}
else
{
return 0;
}
}

S'il vous plaît dites comment remédier à cela et merci d'avance.

Réponses:

2 pour la réponse № 1

Je peux voir deux problèmes d'accessibilité ici. D'abord le simple:

  {
return 0;
exit (0);
}

le exit L'appel est inaccessible. (Cette ligne est presque certainement une erreur. Je ne peux penser à aucune bonne raison d’appeler exit Là.)

Suivant le plus compliqué ... c'est la cause première de l'erreur de compilation:

while(headA!=NULL&&headB!=NULL)
{
if(headA->data==headB->data)
{
headA=headA->next;
headB=headB->next;
}
else
{
return 0;
exit (0);
}
return 1;
}

Regardez où le return 1; est. C'est dans la boucle.

Alors, que se passe-t-il si headA != NULL && headB != NULL évalue à faux? Dans ce cas, le corps de la boucle avec le return 1; à la fin est ignorée ... et vous atteignez la fin de la méthode.

D'où l'erreur de compilation.

Je soupçonne que le «correctif» consiste à déplacer le return après la boucle, mais je n’ai pas essayé de comprendre la logique de votre code, donc cela pourrait être le "correct" correct.


0 pour la réponse № 2

Que se passe-t-il après l'exécution de ce code?

if(headA->data==headB->data)
{
headA=headA->next;
headB=headB->next;
}

...si headA->next == NULL ou headB->next == NULL?