#include "stdafx.h" #include #include using namespace std; // Структура - элемент списка struct list { int val; list* next; list(int val_, list* next_) : val(val_), next(next_) {} }; // Добавить элемент в начало списка void add(list*& head, int n) { head = new list(n, head); } // Напечатать все элементы списка void print(const list* head) { for (const list* p = head; p != 0; p = p->next) { cout << p->val << " "; } cout << "\n"; } // Удалить из списка первый элемент void delete_first(list*& head) { assert(head != 0); // Условие: В списке должен быть хотя бы один элемент list* temp = head; head = head->next; delete temp; } // Удалить из списка n-ный элемент void delete_nth(list*& head, int n) { // Найдем n-1-вый элемент list* p = head; for (int i = 0; i < n-1; i++) { assert(p != 0); p = p->next; } list* temp = p->next; assert(temp != 0); // Условие: в списке одлжно быть не меньше n элементов p->next = p->next->next; delete temp; } // Создать копию списка, в которой элементы идут в обратном порядке void reverse_copy(list*& head1, const list* head) { head1 = 0; // Просто идем по списку и добавляем все элементы в новый список for (const list* p = head; p != 0; p = p->next) { add(head1, p->val); } } // Переставить в списке элементы в обратном порядке void reverse(list*& head) { list* new_head = 0; // Как бы создаем новый список list* p = head; while (p != 0) { // Цикл по всем элементам list* next = p->next; p->next = new_head; // Элемент добавляем в начало нового списка new_head = p; p = next; } head = new_head; } int main () { list* head = 0; for (int i = 0; i < 10; i++) add(head, i); print(head); delete_first(head); print(head); delete_nth(head, 3); print(head); list* head1; reverse_copy(head1, head); print(head1); reverse(head); print(head); return 0; }