Вывод списка в обратном порядке - C (СИ)

Узнай цену своей работы

Формулировка задачи:

У меня есть такая структура:
Листинг программы
  1. struct list_r
  2. {
  3. int a;
  4. struct list_r *next;
  5. };
вводятся два числа, к примеру 123 и 321. представить их в виде списка 1->2->3, аналогично второе. Затем нужно их сложить. для легкости я реализовывал очередью(перенос разрядов легче делать), но вывод у меня идет с конца т.е. 3->2->1., как сделать с начала 1->2->3? вот формирование списка:
Листинг программы
  1. struct list_r *get_list(int f)
  2. {
  3. int p = 0;
  4. struct list_r *first = NULL,
  5. *cur = NULL,
  6. buf;
  7. while(f > 0)
  8. {
  9. p = f % 10;
  10. f = (int)f / 10;
  11. buf.a = p;
  12. struct list_r *r = (struct list_r*)malloc(sizeof(struct list_r));
  13. *r = buf;
  14. r->next = NULL;
  15. if( first == NULL)
  16. {
  17. cur = r;
  18. first = r;
  19. }
  20. else
  21. {
  22. cur->next = r;
  23. cur = r;
  24. }
  25. }
  26. return first;
  27. }
а вот сам вывод:
Листинг программы
  1. void print_list(struct list_r *w)
  2. {
  3. while(w)
  4. {
  5. printf("%d->",w->a);
  6. w = w->next;
  7. }
  8. printf("\n");
  9. }
Есть предположение, что для требуемого вывода список нужно закольцевать.

Решение задачи: «Вывод списка в обратном порядке»

textual
Листинг программы
  1. void print_list(struct list_r *w)
  2. {
  3.     if (!w)
  4.         return;
  5.     print_list(w->next);
  6.     printf("%d->",w->a);
  7. }

Объяснение кода листинга программы

В данном коде представлен функция print_list, которая предназначена для печати списка в обратном порядке.

  1. Список имеет структуру struct list_r, которая включает в себя указатель на следующий элемент списка (next) и значение (a).
  2. Функция print_list принимает указатель на первый элемент списка (w).
  3. Если w равен NULL, то функция завершается и ничего не выводит.
  4. Функция рекурсивно вызывается для печати списка, начиная с элемента, на который указывает w->next.
  5. В конце функции выводится значение w->a с помощью функции printf.
  6. Поскольку функция рекурсивная, она вызывает сама себя для каждого элемента списка, пока не достигнет конца списка (элемента, следующего за последним элементом списка, которому равно NULL).
  7. При каждом вызове функции значение w->a выводится в консоль с помощью printf.
  8. Поскольку функция рекурсивная, она завершится, когда достигнет конца списка (когда w станет равным NULL).
  9. В результате список будет выведен в обратном порядке, поскольку рекурсивные вызовы функции начинаются с последнего элемента списка и продолжаются до первого.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы