2017-10-07 68 views
2

我一直在試圖在2個鏈表中搜索常用詞。C兩個鏈表搜索

我爲此寫了一個簡單的方法。

代碼

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兩個文件的linkedlists的頭。

first2第一個元素是「是。」。輸出給我27「是。」「沒有別的。而27是前11個元素的數量。

+3

'strcmp' for strings? –

+1

這兩個列表是否已分類? – wildplasser

+0

@EdHeal我現在用這個。沒有區別 –

回答

4

完成while(first1 != NULL)循環後,您first1指針總是指向NULL,因此後續while(first2 != NULL)循環迭代總能找到first1 == 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

抱歉打擾你,我有一個問題。我使用了strcmp,但問題仍然存在。它給出891「**是。**」是指27 * 33。 33是第二個鏈表中元素的個數。不知何故,程序總是找到相同的元素,「**是。**」不是一個普通的詞。 if語句有錯誤。 –

+0

@ M.Aktas:您需要提供一個MCVE([MCVE]),以便我們能夠看到您如何創建列表以及發生了什麼。你可以向MCVE提出一個新問題,展示你從這個問題中學到了什麼。正如在這個答案中指出的,你需要使用'strcmp()'或類似的比較字符串;使用'first1-> string == first2-> string'來檢查這些指針是否指向同一個地方(如果他們不指定這個地方,可以說是未定義的行爲,但這就是「多少個天使可以在引腳上跳舞」這個悖論現在不需要關注)。 –

+0

@ M.Aktas正如上面這篇評論所提到的,你需要向我們展示你如何定義'node'以及如何將元素添加到'first1'和'first2',最好在一個新問題中爲清楚起見。 – frslm