2017-03-08 4 views
-1

私は再帰によってダブルリンクリストの検索を実装しようとしています。 入力が1,2,3のように最初のノードの出力のみを返します。それは私に見つかりましたが、2を検索しようとしている場合、それは見つからないと言います。 私は再帰によるC++のダブルリンクリストの検索

else 
{ 
    return search(xtemp->next, num); 
} 

が動作していない、それが前方に移動することはないと思います。

int search(node *xtemp, int num) 
{ 
    xtemp = head; 
    if (xtemp->next == NULL) 
     return 0; 
    if (xtemp == NULL) 
    { 
     cout << "Empty" << endl; 
     return 0; 
    } 
    if (xtemp->info == num) 
    { 
     cout << "Target found" << endl; 
     return 0; 
    } 
    if (xtemp->info != num) 
    { 
     cout << "NOt found," << endl; 
     return 0; 
    } 

    else 
    { 
     return search(xtemp->next, num); 
    } 
} 
+1

、このような問題を解決するための適切なツールは、あなたのデバッガです。スタックオーバーフローを尋ねる前に、コードを一行ずつ進める必要があります。詳しいヘルプは、[小さなプログラムをデバッグする方法(Eric Lippert)](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)を参照してください。最低限、問題を再現する[最小、完全、および検証可能](http://stackoverflow.com/help/mcve)の例と、その問題を再現するためのデバッガ。 –

+0

それは私にエラーを与えません –

+1

@ p156064ZeeshanHaiderSaheen、それはあなたにエラーを与えることはありません。 *エラーを検索する*必要があります。デバッガではやや簡単になります。 – Incomputable

答えて

2

私はあなたが再帰呼び出しで取得するかは重要ではありません、あなたは

xtemp = head; 

だからあなたの関数の最初の行には何をしているかglovalという名前の変数ヘッド... 顔をしていると思います、リンクされたリスト

の頭でxtemp値を置き換えるあなたは)(メインからsearch(head)を呼び出す必要があり、かつ機能

xtemp=headを使用していません10

または、以下を見てください:

if (xtemp->info == num) 
    { 
     cout << "Target found" << endl; 
     return 0; 
    } 
    if (xtemp->info != num) 
    { 
     cout << "NOt found," << endl; 
     return 0; 
    } 

あなたの再帰呼び出しは、あなたがxtemp->情報を持つすべての可能なオプションをカバーするので、それはNUMに等しい場合、それであれば、それは、0を返しますと呼ばれることはありませんnumと等しくない場合は、0も返します。再帰呼び出しにどのくらい正確に行きたいですか?

はこれを試してみてください。

int search(node *xtemp, int num) 
{ 
    if (xtemp == NULL) 
    { 
     cout << "Not Found" << endl; 
     return 0; 
    } 
    if (xtemp->info == num) 
    { 
     cout << "Target found" << endl; 
     return 0; 
    } 
    else 
    { 
     return search(xtemp->next, num); 
    } 
} 
+0

私はそれをしてもまだ動作していません –

+0

関数からxtemp = headという行を削除しましたか? –

+0

はい私はその行を削除します –

関連する問題