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

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

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

У меня есть такая структура:
struct list_r
{
    int a;
    struct list_r *next;
};
вводятся два числа, к примеру 123 и 321. представить их в виде списка 1->2->3, аналогично второе. Затем нужно их сложить. для легкости я реализовывал очередью(перенос разрядов легче делать), но вывод у меня идет с конца т.е. 3->2->1., как сделать с начала 1->2->3? вот формирование списка:
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, которая предназначена для печати списка в обратном порядке.

  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
Похожие ответы