2017-10-07 11 views
2

2つのリンクリストで共通の単語を検索しようとしています。C 2つのリンクリスト検索

私はこれのための簡単な方法を書いています。

コード

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; 
} 
} 

first1とfirst2は2つのファイルのlinkedlistsのヘッダです。

first2最初の要素は "です。"です。出力は私に27 "は。"です。 27は最初の11の要素の数です。

+3

文字列の 'strcmp'ですか? –

+1

2つのリストはソートされていますか? – wildplasser

+0

@EdHeal私はこれを使用しました。差はありません。 –

答えて

4

while(first1 != NULL)ループを終了した後、あなたのfirst1ポインタはいつも、後続while(first2 != NULL)ループの反復は常にfirst1 == NULLを見つけるだろう、NULLを指します。 「関数を入力するときの値:

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; 
} 

また、stringに応じて、」

これを解決するには、first1を保持すべきであるSタイプ、あなたは適切な文字列比較関数を使用する必要があります。

+0

ごめんなさい、私には1つの質問があります。私はstrcmpを使用しましたが、問題は同じです。それは891を与える "** is。**"は27 * 33を意味する。 33は、2番目のリンクされたリスト内の要素の数です。どういうわけか、プログラムは常に "** is。**"と同じ要素を見つけるのは一般的な言葉ではありません。 if文に何か問題があります。 –

+0

@ M.Aktas:MCVE([MCVE])を提供する必要があります。私たちがあなたのリストをどのように作成しているのか、何が起こっているのかを見ることができます。 MCVEで新しい質問をして、あなたがこの事から学んだことを示すことができます。この答えで指摘されているように、文字列を比較するには 'strcmp()'などを使う必要があります。 'first1-> string == first2-> string'を使うと、ポインターが同じ場所を指しているかどうかをチェックします(そうでなければ、おそらく未定義の振る舞いですが、それは"ピンの頭に何人の天使が踊れるか "今はあなたのことを気にする必要のないパラドックス)。 –

+0

@ M.Aktasこのコメントのすぐ上で述べたように、 'node'をどのように定義したか、' first1'と 'first2'にどのように要素を追加したかを、新しい質問に表示する必要があります明確にするために。 – frslm

関連する問題