Вывод списка в обратном порядке - C (СИ)
Формулировка задачи:
У меня есть такая структура:
вводятся два числа, к примеру 123 и 321. представить их в виде списка 1->2->3, аналогично второе.
Затем нужно их сложить. для легкости я реализовывал очередью(перенос разрядов легче делать), но вывод у меня идет с конца т.е. 3->2->1., как сделать с начала 1->2->3?
вот формирование списка:
а вот сам вывод:
Есть предположение, что для требуемого вывода список нужно закольцевать.
Листинг программы
- struct list_r
- {
- int a;
- struct list_r *next;
- };
Листинг программы
- struct list_r *get_list(int f)
- {
- int p = 0;
- struct list_r *first = NULL,
- *cur = NULL,
- buf;
- while(f > 0)
- {
- p = f % 10;
- f = (int)f / 10;
- buf.a = p;
- struct list_r *r = (struct list_r*)malloc(sizeof(struct list_r));
- *r = buf;
- r->next = NULL;
- if( first == NULL)
- {
- cur = r;
- first = r;
- }
- else
- {
- cur->next = r;
- cur = r;
- }
- }
- return first;
- }
Листинг программы
- void print_list(struct list_r *w)
- {
- while(w)
- {
- printf("%d->",w->a);
- w = w->next;
- }
- printf("\n");
- }
Решение задачи: «Вывод списка в обратном порядке»
textual
Листинг программы
- void print_list(struct list_r *w)
- {
- if (!w)
- return;
- print_list(w->next);
- printf("%d->",w->a);
- }
Объяснение кода листинга программы
В данном коде представлен функция print_list, которая предназначена для печати списка в обратном порядке.
- Список имеет структуру
struct list_r
, которая включает в себя указатель на следующий элемент списка (next
) и значение (a
). - Функция print_list принимает указатель на первый элемент списка (
w
). - Если w равен NULL, то функция завершается и ничего не выводит.
- Функция рекурсивно вызывается для печати списка, начиная с элемента, на который указывает
w->next
. - В конце функции выводится значение
w->a
с помощью функцииprintf
. - Поскольку функция рекурсивная, она вызывает сама себя для каждого элемента списка, пока не достигнет конца списка (элемента, следующего за последним элементом списка, которому равно NULL).
- При каждом вызове функции значение
w->a
выводится в консоль с помощьюprintf
. - Поскольку функция рекурсивная, она завершится, когда достигнет конца списка (когда
w
станет равным NULL). - В результате список будет выведен в обратном порядке, поскольку рекурсивные вызовы функции начинаются с последнего элемента списка и продолжаются до первого.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д