2017-10-07 5 views
2

J'ai essayé de rechercher des mots communs dans 2 linkedlist.C deux recherche de liste-linked

J'écris une méthode simple pour cela.

code

void search(node *first1, node *first2){ 

while(first2 != NULL){ 

    while(first1 != NULL){ 
     if(first1 -> string == first2 -> string){ 
      printf("%s\n", first1 -> string); 
     } 

     first1 = first1 ->next; 
    } 

    first2 = first2 ->next; 
} 
} 

Premier1 et first2 sont en-têtes des listes chaînées de deux fichiers.

premier2 premier élément est "est". La sortie me donne 27 "est" rien d'autre. Et 27 est le nombre d'éléments dans first1 ll.

+3

'strcmp' pour les chaînes? –

+1

Les deux listes sont-elles triées? – wildplasser

+0

@ EdHeal je l'ai utilisé maintenant. ne fait aucune différence –

Répondre

4

Après avoir terminé une boucle while(first1 != NULL), votre pointeur first1 pointe toujours à NULL, donc ultérieures itérations de la boucle while(first2 != NULL) toujours trouver first1 == NULL.

Pour y remédier, vous devez tenir first1 « valeur s en entrant dans la fonction:

void search(node *first1, node *first2){ 

node *first1_head = first1; // <- keep track of the first element in first1 

while(first2 != NULL){ 
    while(first1 != NULL){ 
     if(first1 -> string == first2 -> string){ 
      printf("%s\n", first1 -> string); 
     } 

     first1 = first1 ->next; 
    } 

    first1 = first1_head; // <- restore first1 to point to its first element 
    first2 = first2 ->next; 
} 

En outre, selon string » type s, vous devez utiliser une fonction de comparaison de chaînes appropriée.

+0

Désolé de vous déranger, j'ai une question. J'ai utilisé strcmp mais le problème est toujours le même. Il donne 891 "** est. **" signifie que 27 * 33. 33 est le nombre d'éléments dans la deuxième liste liée. D'une manière ou d'une autre, le programme trouve toujours le même élément dont "** est. **" n'est pas un mot courant. Il y a quelque chose qui ne va pas dans l'instruction if. –

+0

@ M.Aktas: Vous devez fournir un MCVE ([MCVE]) pour que nous puissions voir comment vous créez les listes et ce qui se passe. Vous pouvez poser une nouvelle question avec le MCVE, montrant ce que vous avez appris de celui-ci.Comme indiqué dans cette réponse, vous devez utiliser 'strcmp()' ou similaire pour comparer les chaînes; utiliser 'first1-> string == first2-> string' vérifie si les pointeurs pointent vers le même endroit (et est sans doute un comportement indéfini s'ils ne le font pas, mais c'est un" combien d'anges peuvent danser sur la tête d'une épingle " paradoxe qui n'a pas besoin de concerner votre vision maintenant). –

+0

@ M.Aktas Comme mentionné ci-dessus ce commentaire, vous devez nous montrer comment vous avez défini 'node' ainsi que comment vous avez ajouté des éléments à' first1' et 'first2', de préférence dans une nouvelle question pour plus de clarté. – frslm