einfach verkettete Liste - reverse rekursiv



  • Hallo Leute,

    wie ihr schon gemerkt habt möchte ich eine einfach Verkettete Liste umkehren, mit einer rekursiven Funktion.

    also meine verkettete Liste sieht so aus:(ich schreibe nur teile des Programms)

    struct listev {
    	char eintrag;
    	struct listev *next;
    };
    
    void anhaengen(struct listev *a, struct listev *b){
    	a->next = b;
    }
    	struct listev eintraege[strlen(eingabe)-1];
    
    	scanf("%[^'\n']",eingabe);
    
    	for(i=0;i<strlen(eingabe)-1;i++){
    	anhaengen(&eintraege[i], &eintraege[i+1]);
    	}
            eintraege[strlen(eingabe)-1].next = NULL;
    

    also hat man z.B. mit "test" als eingabe:
    eintaege[0] mit eintrag=t,eintaege[1] mit eintrage=e,eintaege[2] mit eintrag=s und eintaege[3] mit eintrag=t

    mir fällt da nichts ein 😞 (nichts rekursives)
    Bin für jede Hilfe Dankbar.


  • Mod

    z.B. so

    struct listev* swap_next(struct listev* p, struct listev* next){
        struct listev* res=p->next;
        return p->next=next, res;
    }
    struct listev* do_reverse(struct listev* src, struct listev* dest){
        return src==0?dest:do_reverse(swap_next(src,dest),src);
    }
    struct listev* reverse(struct listev* src){
        return do_reverse(src,0);
    }
    


  • Dankeschön, jetzt geht mir ein Licht auf, eine frage:

    Wozu hast du die reverse funktion? Man kann doch do_reverse aufrufen indem man das erste Element und eine 0 direkt übergibt. Oder sehe ich da etwas nicht?


Anmelden zum Antworten