Ü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.
-
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 ???
-
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; }