Вывод элементов списка - C (СИ)
Формулировка задачи:
Здравствуйте! Есть односвязный список, требуется вывести все его элементы. Но суть в том, что я начинаю прогон по списку с head'а, в котором у меня последнее введенное значение, т.е, соответственно, список выводится в порядке, обратном тому порядку, в котором я вводил список. Как вывести элементы списка в обратном порядке? Подскажите пожалуйста. Заранее благодарю.
Решение задачи: «Вывод элементов списка»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
typedef int Data;
typedef struct Node {
Data data;
struct Node* next;
} Node;
//-----------------------------------------------------------------------------
void push(Node** list, const Data data) {
Node* node = malloc(sizeof(Node));
node->data = data;
node->next = *list;
*list = node;
}
//-----------------------------------------------------------------------------
void printFromHead(const Node* list) {
if (list) {
printf("%d ", list->data);
printFromHead(list->next);
}
}
//-----------------------------------------------------------------------------
void printFromTail(const Node* list) {
if (list) {
printFromTail(list->next);
printf("%d ", list->data);
}
}
//-----------------------------------------------------------------------------
int main() {
int i;
Node* list = NULL;
for (i = 0; i < 10; ++i) {
push(&list, i + 1);
}
printFromHead(list); putchar('\n');
printFromTail(list); putchar('\n');
return 0;
}
Объяснение кода листинга программы
- Подключаются необходимые заголовочные файлы
- Объявляются типы данных для элементов списка
- Определяется структура узла списка
- Создаются функции для добавления элемента в начало списка и для вывода элементов из начала и конца списка
- В функции main создается список и заполняется элементами
- Вызываются функции для вывода элементов списка
- Программа завершается возвратом значения 0, что означает успешное выполнение