Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » verketete Liste - Elemente vertauschen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
05.07.2007, 22:01 Uhr
~newb
Gast


Hi Leute,

ich hab grad wieder nen Hänger bei den verketteten Listen, bzw. ein verständnisproblem.

Hier mal mein Beispielcode:

C++:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



struct person {
    char *name;
    struct person *next;
};



void invertiere(struct person *anfang) {
    struct person *puffer, *puffer1;
    
    
    puffer1=anfang;
    
    puffer->next=anfang->next->next->next;    
    anfang->next->next->next=anfang->next;    
    anfang->next=puffer->next;                

    anfang->next->next=puffer1;                
    printf("%s ",anfang->name);
    printf("%s ",anfang->next->name);
    printf("%s \n",anfang->next->next->name);// Schulze Meier Kohl



}



void drucke(struct person *obj) {    

    printf("%s ",obj->name);
    printf("%s ",obj->next->name);
    printf("%s \n",obj->next->next->name);// Kohl Meier Schulze

}


int main(void) {
    struct person p3 = {"Schulze", NULL};
    struct person p2 = {"Meier", &p3};
    struct person p1=  {"Kohl",&p2};
    struct person *liste = &p1;    
                                        drucke(liste);
invertiere(liste);

}



Bitte nicht auslachen, ich befinde mich am Anfang meiner Schaffenskunst bei der Listenthematik.

Ich will eigentlich nur in meiner invertiere Funktion die übergebene Liste so verändern, dass sie die Namen andersrum ausgibt wie die Funktion drucke. Wie in den Kommentaren beschrieben.

Wäre für jede Hilfe dankbar.
Vielen Dank

Grüße
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.07.2007, 22:30 Uhr
0xdeadbeef
Gott
(Operator)


Es gibt da zwei Möglichkeiten - entweder, du machst ne doppelt verkettete Liste draus und merkst dir den Vorgänger, also

C++:
struct person {
  char const *name;
  struct person *prev, *next;
};


...oder du machst das ganze rekursiv, also

C++:
void drucke_rueckwaerts(struct person *liste) {
  if(liste->next != NULL) {
    drucke_rueckwaerts(liste->next);
  }
  puts(liste->name);
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: