2016-12-21 2 views
0

Я пытаюсь изменить связанный список в c, который я создал, копируя данные из структуры.Обратный алгоритм для связанного списка в C

Я создал следующую функцию с именем reverselist, прочитав много предложений об изменении списка, но после ее применения и повторной попытки печати я ничего не печатаю на своем экране.

Я не хочу просто печатать файл, но я хочу, чтобы связанный список был постоянно изменен. Может кто-то выяснить, в чем проблема в моем коде?

#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

Существует множество qu о том, как изменить позиции в односвязном списке. Вы уверены, что не можете найти ни одного из них. –

+0

Ну, я нашел много способов, и я попытался применить некоторые из них. Тот, который выглядит ближе всего к решению, я думаю, это тот, который я разместил здесь, но все же не могу заставить его работать. Спасибо за и я все еще сосредоточен на чтении здесь и там, чтобы найти решение! ! – baskon1

ответ

1

Этот код, очевидно, неправильно, потому что вы передаете NULL к reverselist:

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

Я предполагаю, что это должно быть:

current = reverselist(list1); 

(Вы не нужна переменная head, потому что вы ее никогда не используете)

+0

Огромное вам спасибо, это было прямо перед моими глазами, но не могло решить проблему! – baskon1

+0

@ baskon1 - из 16 вопросов, которые вы задали до сих пор в StackOverflow, вы приняли только 1 ответ. В то время как вы не обязаны принимать ответ, вы должны приложить усилия, когда ответ разрешит проблемы, с которыми вы сталкиваетесь. –

+0

Извините! Сделаем это с этого момента! Благодаря! – baskon1

Смежные вопросы