Überprüfen wieviele Elemente in einer Liste vorhanden sind



  • hey, möchte überprüfen wieviele Elemente in einer einfach verketteten Liste vorhanden sind.

    ich hatte überlegt, dass man eine variable hochzählt beim durchlaufen der Liste

    Liste *ptr = anker;
    int a=0;
    if (anker->next==nullptr)
       a=1;
    else{
      while (ptr->next != nullptr)
      {
        ++a;
        ptr = ptr->next;
      }
    }
    

    gibt es vllt eine einfachere/bessere Methode (auch für Anfänger geeignet)?
    falls nicht: fehler im code?

    danke für hilfe



  • Was wenn anker==null.


  • Mod

    anker==nullptr wurde schon erwähnt.

    Mit dem Zählen klappt das auch nicht so richtig.

    // Ich nehme mal an, Liste sieht ungefähr so aus
    struct Liste {
        int data;
        List* next;
    };
    
    List liste1[] = {
        { 0, nullptr }
    }; // ergibt a == 1
    
    Liste liste2[] = {
        { 0, liste2 + 1 },
        { 1, nullptr }
    }; // ergibt a == 1 ???
    
    Liste liste3[] = {
        { 0, liste3 + 1 },
        { 1, liste3 + 2 },
        { 2, nullptr }
    }; // ergibt a == 2 ???
    

  • Mod

    Nicht so schwer machen:

    std::size_t len(Liste const* p) {
        std::size_t l=0;
        while (p) {p=p->next; ++l;}
        return l;
    }
    


  • Arcoth schrieb:

    Nicht so schwer machen:

    std::size_t len(Liste const* p) {
        std::size_t l=0;
        while (p) {p=p->next; ++l;}
        return l;
    }
    

    Das schreit doch nach for!

    std::size_t len(const Liste* p)
    {
        std::size_t l = 0;
        for (; p; p = p->next)
            ++l;
        return l;
    }
    


  • std::size_t len(const Liste* p)
    {
        std::size_t l = 0;
        for (; p; p = p->next, ++l);
        return l;
    }
    


  • std::size_t len(const Liste* p)
    {
        return p ? len(p->next) + 1 : 0;
    }
    

Log in to reply