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