2014-09-23 3 views
0

Ниже приведен простой сегмент кода в C, чтобы создать связанный список и распечатать все элементы, содержащиеся в списке.Простейший связанный список Создание и печать данных

Пользователь просят ввести целочисленные данные до тех пор, пока не будет введен ноль, который отмечает прекращение ввода пользователя; После сохранения данных в связанном списке программа печатает все элементы, хранящиеся в списке, а затем завершает свое выполнение.

Я не могу заставить ее работать, каждый раз, когда он дает «Сегментация ошибка» ошибка, пожалуйста, проверьте и скажите мне, где я неправильно (с помощью GCC 4.8.2)

Код:

struct node 
{ 
    int data; 
    struct node * next; 
}; 

struct node * createLinkedList() 
{ 
    int x; 
    struct node * start; 
    start = NULL; 
    printf("Input 0 to end, Insert elements :\n"); 

for(scanf("%d", &x); x ;scanf("%d", &x)) 
{ 
    struct node * temp = (struct node *) malloc(sizeof(struct node)); 
    if (temp) 
    { 
     temp->data = x; 
     temp->next = NULL; 

     if(start == NULL) { 
      start = temp; 
     } else { 
      start->next = temp; 
      start = temp; 
     } 
    } 
} 

return start; 
} 

void printLinkedList(struct node * start) 
{ 
    if (start == NULL) { 
     printf("Linked List is empty!\n"); 
    } else { 
     printf("\nPrinting Linked List : \n"); 
     struct node * s; 
     s = start; 
     while(s != NULL) 
     { 
      printf("%d\n", s->data); 
      s = s->next; 
     } 
    } 
} 

int main(int argc, char const *argv[]) 
{ 
    struct node * start; 
    start = NULL; 
    start = createLinkedList(); 
    printLinkedList(start); 
    return 0; 
} 
+0

Просто посмотрите на цикл for ... omg – Igor

+0

изменил его на * while (x! = 0) * + добавил * scanf ("% d", & x) * в соответствующих местах; ** Нет изменений в O/p ** – cseav

+1

Используйте свой дружественный отладчик neihbourhood (или gdb) и сообщите нам (и вам самим), какая строка генерирует исключение. Нам гораздо легче это сделать, чем нам, потому что у вас есть код, окружающая среда и т. Д. Уже перед вами. –

ответ

1

Эта часть кода

if(start == NULL) { 
     start = temp; 
    } else { 
     start->next = temp; 
     start = temp; 
    } 

является недействительным. Должно быть

if(start == NULL) { 
     start = temp; 
    } else { 
     temp->next = start; 
     start = temp; 
    } 

Также у вас должна быть функция, которая удаляет все узлы списка.

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