Hallo,
Vorab erst mal, ich weiss dass es zig Möglichkeiten gibt verkettete Listen zu bauen, selbstverständlich auch nur mit Klassen als Container usw. mir geht es aber hier ums Verständnis der hier benutzten Art von verketteten Listen.
Das Problem ist wahrscheinlich sehr gering aber ich dreh mich schon seit Tagen um mich selbst und find den Bug nicht!
Was Funktioniert: :wink:
1. Die Liste wird korrekt angelegt und ausgegeben auch die Anzahl der Elemente.
2. Das neue erste Element wird korrekt angelegt und die Liste wird ebenso korrekt ausgegeben auch die Anzahl der Elemente.
Was nicht funktioniert:
Das neue letzte Element wird wahrscheinlich nicht richtig angelegt und deshalb wird das letzte Element nicht ausgegeben wenn die Liste ausgegeben wird.
Wird jedoch der obere Teil in der Funktion addNewLastElement(int wert) einkommentiert,
in diesem Teil füge ich das letzte Element wie bei einer einfach verketteten Liste ein dann funktioniert alles.
Ich gehe übrigens davon aus dass sich schon ein Element in der Liste befindet (keine Plausibilitätsprüfung) da ich die Liste ja zuvor erstellt habe.
Ich habe versucht alles so gut und so verständlich wie möglich zu kommentieren.
Hier der Code für die main():
Alles anzeigen
Hier der Code für die List.h:
Alles anzeigen
Vorab schon mal vielen Dank für eure Mühe
ShadowEater :wink:

Vorab erst mal, ich weiss dass es zig Möglichkeiten gibt verkettete Listen zu bauen, selbstverständlich auch nur mit Klassen als Container usw. mir geht es aber hier ums Verständnis der hier benutzten Art von verketteten Listen.
Das Problem ist wahrscheinlich sehr gering aber ich dreh mich schon seit Tagen um mich selbst und find den Bug nicht!
Was Funktioniert: :wink:
1. Die Liste wird korrekt angelegt und ausgegeben auch die Anzahl der Elemente.
2. Das neue erste Element wird korrekt angelegt und die Liste wird ebenso korrekt ausgegeben auch die Anzahl der Elemente.
Was nicht funktioniert:

Das neue letzte Element wird wahrscheinlich nicht richtig angelegt und deshalb wird das letzte Element nicht ausgegeben wenn die Liste ausgegeben wird.
Wird jedoch der obere Teil in der Funktion addNewLastElement(int wert) einkommentiert,
in diesem Teil füge ich das letzte Element wie bei einer einfach verketteten Liste ein dann funktioniert alles.
Ich gehe übrigens davon aus dass sich schon ein Element in der Liste befindet (keine Plausibilitätsprüfung) da ich die Liste ja zuvor erstellt habe.
Ich habe versucht alles so gut und so verständlich wie möglich zu kommentieren.
Hier der Code für die main():
Quellcode
- #include "List.h"
- void main()
- {
- mvList mvListe;
- int i;
- int j = 1;
- cout << "Liste ist leer !!! ==> Liste mit 3 Elementen bauen" << endl;
- for (i = 0; i < 3; i++)
- {
- mvListe.addElement(j++);
- }
- mvListe.showElements();
- cout << "Neues Erstes Element einfuegen" << endl;
- mvListe.addElement(5, FIRST);
- mvListe.showElements();
- cout << "Neues letztes Element einfuegen" << endl;
- mvListe.addElement(10, LAST);
- mvListe.showElements();
- }
Hier der Code für die List.h:
Quellcode
- #include <iostream>
- using namespace std;
- enum { NONE = 0,FIRST, LAST, MIDDLE };
- class mvList
- {
- private:
- //*************************************** SRTUCT ERSTELLEN *************************************
- struct Listenknoten
- {
- int data;
- Listenknoten *next;
- Listenknoten *prev;
- };
- public:
- //******************************* ZEIGER AUF STRUCT ERSTELLLEN *********************************
- Listenknoten *neu;
- Listenknoten *head;
- Listenknoten *tail;
- Listenknoten *current1;
- Listenknoten *current2;
- int counterElements;
- //********************************** KONSTRUKTOR / DESTRUKTOR **********************************
- mvList()
- {
- neu = NULL; // Zeiger mit Null initialisieren
- head = NULL; // Zeiger mit Null initialisieren
- tail = NULL; // Zeiger mit Null initialisieren
- current1 = NULL; // Zeiger mit Null initialisieren
- current2 = NULL; // Zeiger mit Null initialisieren
- counterElements = 0;
- }
- ~mvList()
- {
- neu = NULL; // Zeiger mit Null initialisieren
- head = NULL; // Zeiger mit Null initialisieren
- tail = NULL; // Zeiger mit Null initialisieren
- current1 = NULL; // Zeiger mit Null initialisieren
- current2 = NULL; // Zeiger mit Null initialisieren
- delete neu;
- delete head;
- delete tail;
- delete current1;
- delete current2;
- }
- //******************************* PROTOS DER MEMBERFUNKTIONEN **********************************
- void showElements();
- void addElement(int wert, int , int);
- void addNewFirstElement(int wert);
- void addNewLastElement(int wert);
- void addNewMiddleElement(int wert, int atPosition);
- };
- //**********************************************************************************************
- //******************************* ENTSCHEIDUNG FUNKTIONAUFRUFE *********************************
- void mvList::addElement(int wert, int atPos = NONE, int pos = 0)
- {
- if (atPos != NONE)
- {
- switch(atPos)
- {
- case FIRST: addNewFirstElement(wert);
- break;
- case LAST: addNewLastElement(wert);
- break;
- default:
- break;
- }
- }else
- {
- addNewFirstElement(wert);
- }
- }
- //**********************************************************************************************
- //****************************** NEUES ERSTES ELEMENT EINFÜGEN *********************************
- void mvList::addNewFirstElement(int wert)
- {
- neu = new Listenknoten;
- neu->prev = NULL;
- neu->next = head;
- head = neu;
- neu->data = wert;
- counterElements++;
- cout << "Elemente: " << counterElements;
- }
- //**********************************************************************************************
- //************************* NEUES LETZTES ELEMENT EINFUEGEN INSERT AFTER ***********************
- void mvList::addNewLastElement(int wert)
- {
- neu = new Listenknoten;
- //
- //
- // current1 = head; // einkommentieren
- // while (current1->next != NULL) // einkommentieren
- // { // einkommentieren
- // current1 = current1->next; // einkommentieren
- // } // einkommentieren
- // neu->next = NULL; // einkommentieren
- // // einkommentieren
- // current1->next = neu; // einkommentieren
- // // einkommentieren
- // neu->data = wert; // einkommentieren
- neu->next = NULL; // auskommentieren
- neu->prev = tail; // auskommentieren
- tail = neu; // auskommentieren
- neu->data = wert; // auskommentieren
- counterElements++;
- cout << "Elemente: " << counterElements;
- }
Vorab schon mal vielen Dank für eure Mühe
ShadowEater :wink: