2017-02-17 1 views
0

Ich übe LLL-Rekursion, und ich bin derzeit auf dieses Problem fest. Hier ist, was ich bisher habe:Zählen Sie die Anzahl der Knoten in der Liste, die rekursiv dieselben Daten wie der letzte Knoten in der Linearverknüpften Liste haben

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

Wie kann ich die Anzahl erhöhen? Ich habe wirklich Schwierigkeiten, rückwärts mit Rekursion (vom Ende der Liste) zu arbeiten. Vielen Dank!

Antwort

0

Sie könnten:

  • Verwenden Sie eine statische lokale Variable (One-Shot-Einsatz nur da wird es nie wieder initialize)
  • Verwenden Sie eine globale Variable
  • Übergeben Sie die Zählung als Parameter, Rückkehr die aktualisierte Anzahl
  • Pass einen Zeiger auf die Zählung als Parameter, aktualisieren Sie es
0

versuchen, etwas wie folgt aus:

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

Vielen Dank für Ihre Antwort. Funktioniert das, wenn last_node_data bis zum Traverse unbekannt ist? –

Verwandte Themen