#include <iostream>
using namespace std;
typedef struct element {
int number;
struct element *next;
struct element *prev;
} element;
element *create_element(int number);
void add_next(element *current, element *new_element);
void add_prev (element *current, element *new_element);
void delete_element(element *element);
void print_list(element *list);
void delete_list(element **list);
element *get_first(element *list);
int main() {
setlocale( LC_ALL, "Russian" );
int n, number;
element *list = create_element(9);
do{
cout << "Списко:" << endl;
print_list(list);
cout << "Менюшка:" << endl;
cout << "1. Добавить элемент справа" << endl;
cout << "2. Добавить элемент слева" << endl;
cout << "3. Удалить один элемент" << endl;
cout << " => "; cin >> n;
switch (n) {
case 1: cout << "Че будем добавлять?"; cin >> number;
add_next(list, create_element(number));
break;
case 2: cout << "Че будем добавлять?"; cin >> number;
add_prev(list, create_element(number));
break;
case 3:
; }
} while ( n != 0);
//delete_list(&list);
print_list(list);
return 0;
}
void delete_element(element *element) {
if(element != NULL) {
if(element->prev != NULL) element->prev->next = element->next;
if(element->next != NULL) element->next->prev = element->prev;
delete element;
}
}
int get_count(element *list) {
int count = 0;
element *prev = list;
element *next = list;
if(list != NULL) {
++count;
while(prev->prev != NULL) {
prev = prev->prev;
++count;
}
while(next->next != NULL) {
next = next->next;
++count;
}
}
return count;
}
void print_list(element *list) {
if(list != NULL) {
for(element *current = get_first(list); current != NULL; current = current->next) { cout << current->number << "\n"; }
}
}
void add_next(element *current, element *new_element) {
if(new_element != NULL && current != NULL) {
new_element->next = current->next;
new_element->prev = current;
current->next = new_element;
if(new_element->next != NULL) new_element->next->prev = new_element;
}
}
element *create_element(int number) {
element *item = new element;
item->next = NULL;
item->prev = NULL;
item->number = number;
return item;
}
element *get_first(element *list) {
if ( list != NULL ) { while ( list -> prev != NULL) list = list -> prev; }
return list;
}
element *get_last(element *list) {
if ( list != NULL ) { while ( list -> next != NULL) list = list -> next; }
return list;
}
void add_prev (element *current, element *new_element) {
if ( new_element != NULL && current != NULL ) {
new_element -> next = current;
new_element -> prev = current->prev;
current->prev = new_element;
if(new_element -> prev != NULL) new_element -> prev -> next = new_element;
}
}