2016-12-21 1 views
0

Ich versuche, eine verkettete Liste in c umzukehren, die ich durch Kopieren der Daten aus einer Struktur erstellt habe.Reverse-Algorithmus für eine verkettete Liste in C

Ich habe die folgende Funktion mit dem Namen reverselist erstellt, nach dem Lesen einer Menge von Vorschlägen über das Umkehren einer Liste, aber nach dem Anwenden und erneut versuchen zu drucken, bekomme ich nichts auf meinem Bildschirm gedruckt.

Ich möchte nicht nur die Datei drucken, aber ich möchte die verknüpfte Liste dauerhaft geändert. Kann jemand herausfinden, was das Problem in meinem Code ist?

#include <stdio.h> 
#include <string.h> 
#include <stdlib.h> 

int i,j,temp; 

typedef struct{ 
    int nr; 
}PASSENGERS; 

typedef struct list1{ 
    int nr; 
    struct list1 *next; 
}LIST1; 


LIST1* reverselist (LIST1 *head) 
{ 
    LIST1 *cursor=NULL; 
    LIST1 *next; 
    while(head){ 
     next=head->next; 
     head->next=cursor; 
     cursor=head; 
     head=next; 
    } 
    return cursor; 
} 

int main() 
{ 
    PASSENGERS passenger[53]; 
    for (j=0;j<53;j++) 
     passenger[j].nr=j+1; 

    PASSENGERS *start=NULL; 
    char selection; 
    do{ 
     printf("0. Exit and Print File\n"); 
     scanf(" %c",&selection); 
    } while (selection!='0'); 

    LIST1 *list1, *start=NULL; 
    for (i=0;i<53;i++){ 
     list1 = (LIST1 *) malloc (sizeof(LIST1)); 
     list1->next = NULL; 
     list1->nr = passenger[i].nr; 

     if (start ==NULL) 
      start = list1; 
     else //add new node at the beginning of list 
     { 
      list1->next = start; 
      start = list1; 
     } 
    } 

    LIST1 *current = list1; 
    printf("The original list is:"); 
    while (current !=NULL) /* Printing the names on the list ok*/ 
    { 
     printf("%d\n",current->nr); 
     current = current->next; 
    } 

    LIST1* head = NULL; 
    head=reverselist(head); 

    printf("The reversed list is:"); 

    while (current !=NULL){ 
     printf("%d\n",current->nr); 
     current = current->next; 
    } 
} 
+2

Es gibt zahlreiche qu Es wird erläutert, wie Sie die Elemente in einer einfach verknüpften Liste umkehren können. Sind Sie sicher, dass Sie keine von ihnen finden können? –

+0

Nun, ich habe viele Wege gefunden, und ich habe versucht, einige von ihnen anzuwenden. Der, der einer Lösung am nächsten kommt, denke ich ist der, den ich hier gepostet habe, aber immer noch nicht scheinen kann, es funktioniert .. Danke für die Vorschlag, und ich bin immer noch konzentriert auf das Lesen hier und da, um die Lösung zu finden! ! – baskon1

Antwort

1

Dieser Code ist offensichtlich falsch, weil Sie vorbei NULL-reverselist:

LIST1* head = NULL; 
head=reverselist(head); 

Ich vermute, dass dies sein sollte:

current = reverselist(list1); 

(Sie nicht tun brauche die head Variable hier, weil du sie nie benutzt hast)

+0

Vielen Dank, es war nur vor meinen Augen, aber ich konnte das Problem nicht erkennen! – baskon1

+0

@ baskon1 - von den 16 Fragen, die Sie bisher zu StackOverflow gestellt haben, haben Sie nur eine Antwort akzeptiert. Obwohl Sie keine Antwort akzeptieren müssen, sollten Sie sich bemühen, wenn eine Antwort die Probleme löst, mit denen Sie konfrontiert sind. –

+0

Entschuldigung! Werde es von jetzt an tun! Vielen Dank! – baskon1