2017-02-17 8 views
0

私はLLL再帰を練習していますが、現在この問題を抱えています。これまで私が持っているものは次のとおりです。リスト内で、リニアリンクリストの最後のノードと同じデータを再帰的に持つノードの数をカウントします。

count_last(node* head, int &last_node_data) 
{ 
    if(!head) return 0; 
    if(!head->next) 
    {last = head->data; 
     return 0; 
    } 
     count_last(head->next,last); 
     if(head->data == last) 
      //Increase count by 1; 
    } 

カウントを増やすにはどうすればよいですか?再帰(リストの最後から)で逆方向に作業するときは、本当に苦労します。ありがとうございました!

答えて

0

あなた可能性:

  • 使用静的ローカル変数(ワンショットの使用、それが再初期化することはありませんのみので)
  • 使用グローバル変数を
  • は、パラメータ、戻り値としてカウント数を渡します更新されたカウント
  • それを
0

を更新し、パラメータとしてカウントにポインタを渡し、このような何か試してください:あなたの応答のための

int count_last(node* head, int &last_node_data) 
{ 
    if (!head) return 0; 

    // if you don't want to include the last 
    // node in the count, you can filter it out... 
    // 
    // if (!head->next) return 0; 

    return ((head->data == last_node_data) ? 1 : 0) + count_last(head->next, last_node_data); 
} 
+0

感謝を。 last_node_dataがトラバースするまで不明な場合、これは機能しますか? –

関連する問題