Вывод списка в обратном порядке - 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). - В результате список будет выведен в обратном порядке, поскольку рекурсивные вызовы функции начинаются с последнего элемента списка и продолжаются до первого.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д