doppelt verkette listen rückwärtsausgabe



  • Hallo ich versuche eine doppelt verkette Liste rückwärts auszugeben mit der Funktion "void ausgaberueck(listenelement ^listenanfang)". Mein Problem ist nun das er mir das letzte Element nicht ausgibt wenn ich nicht zum Schluss "Console::WriteLine("{0}",listelast->daten);" reinschreibe. Geht die vollständige Ausgabe auch ohne "Console::WriteLine("{0}",listelast->daten);" zum Schluss, oder muss ich mich damit abfinden?

    #include "stdafx.h"
    
    using namespace System;
    
    ref struct listenelement{
    	String ^daten;
    	listenelement ^next;
    	listenelement ^last;		////
    };
    
    void anhaengen(String ^datenneu, listenelement ^listenanfang){
    	listenelement ^hilfshandle;
    	hilfshandle = listenanfang;
    
    	while(hilfshandle->next != nullptr){
    		hilfshandle = hilfshandle->next;
    	}
    
    	hilfshandle->next = gcnew listenelement;
    
    	listenelement ^listelast;		/////
    	listelast = hilfshandle;		/////
    
    	hilfshandle = hilfshandle->next;
    
    	hilfshandle->last = listelast;   ////
    
    	hilfshandle->daten = datenneu;
    }
    
    void ausgeben(listenelement ^listenanfang){
    	Console::WriteLine("Ausgabe Vorwärts\n");
    	listenelement ^hilfshandle;
    	hilfshandle = listenanfang;
    
    	Console::WriteLine("{0}", hilfshandle->daten);
    
    	while(hilfshandle->next != nullptr){
    		hilfshandle = hilfshandle->next;
    		Console::WriteLine("{0}", hilfshandle->daten);
    	}
    }
    /////////////////////////////////////////////////////////////////
    void ausgaberueck(listenelement ^listenanfang){   
    	Console::WriteLine("\n\nAusgabe Rückwärts\n");
    	listenelement ^hilfshandle;
    	hilfshandle = listenanfang;
    	listenelement ^listelast;
    
    	while(hilfshandle->next != nullptr){
    		hilfshandle = hilfshandle->next;
    	}
    
    	listelast = hilfshandle;
    
    	while(listelast->last != nullptr){
    		Console::WriteLine("{0}", listelast->daten);
    		listelast = listelast->last;
    	}
    	//Console::WriteLine("{0}",listelast->daten); Vollständige Ausgabe ohne diese Zeile
    
    }
    ///////////////////////////////////////////////////////////////
    
    int main(array<System::String ^> ^args)
    {
    	listenelement ^listenanfang;
    	listenanfang = gcnew listenelement;
    
    	listenanfang->daten = "Element 1";
    
    	for(Int32 schleife=2; schleife<4; schleife++){
    		anhaengen("Element " + schleife, listenanfang);
    	}
    
    	ausgeben(listenanfang);
    	ausgaberueck(listenanfang);  ///////////////////
    
        return 0;
    }
    


  • Der Fehler liegt hier:

    Edit: Hier stand mal die Lösung, aber da ich darauf hingewiesen wurde, das das eine Schulaufgabe ist, habe ich sie kurzerhand wieder gelöscht.



  • Vielen Dank. geht einwandfrei .



  • *Gelöscht*



  • @Burkhi: Du hast hier eine Schulaufgabe gelöst.
    Er wird die Liste nicht mehr brauchen.
    Aber gut dass Du hier für andere die Schulaufgaben machst, ohne mal nachzufragen. 😡

    ILS, SDG oder HAF ? ? ?



  • Dozent ILS Sieb... schrieb:

    @Burkhi: Du hast hier eine Schulaufgabe gelöst.
    Er wird die Liste nicht mehr brauchen.
    Aber gut dass Du hier für andere die Schulaufgaben machst, ohne mal nachzufragen. 😡

    ILS, SDG oder HAF ? ? ?

    Dann möchte ich mich hiermit in aller Öffentlichkeit bei dir entschuldigen, wenn ich das vorher gewusst hätte, dann hätt ich nicht so eine direkte Lösung angegeben. Hatte heute wohl (leider) einen zu netten Tag.

    PS: FH



  • Die A_ufgabe war doch eh soweit fertig bis auf ein kleines problem wo ich hilfe benötigte. wo ist denn da das problem. lasse ja nicht die gesamten aufgaben lösen , sondern versuche diese selbst zu lösen. leider hatte ich eben nur dieses kleine problem und bin auch sehr dankbar über die hilfe gewesen.


Anmelden zum Antworten