1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
#include <iostream>
#include <stdlib.h>
#include <time.h>
struct node {
int value;//значение
node* next;
int index;
//указатель на следубщий элемент списка
}; node* head; node* tail; node fict_head = { -1, head };
//указатель на голову, хвост и фиктивную голову
void add_node_to_tail(int data,int k) { //функция добавления элемента в хвост
node* new_node = new node; //создаём новый элемент
new_node->value = data;
if (head == NULL) //если у нас ещё пустой список, то добавляет вый элемент в голову
{
new_node->next = new_node;
head = new_node;
head->index = k;
}
else if (tail == 0) { //Если есть только голова, то инициализируем новым элементом хвост
new_node->next = new_node;
tail = new_node;
tail->index = k;
head->next = tail;
}
else { //если есть голова и хвост, то создаём новый элемент и присваиваем его хвосту
node* tmp = new node;
tmp = tail;
tmp->next = new_node;
tail = new_node;
tail->index = k;
tail->next = tail;
}
}
void print(node* head)
{
if (head->next == head) //если элемент крайний, то закончить вывод на нем
{
printf("%d ", head->value);
return;
}
else {
//иначе вывести значениеи рекурсивно вызвать функцию для следующего элемента
printf("%d ", head->value);
print(head->next);
}
}
void delite(int in,int max)
{
node* new_node = new node;
node* p = new node;
node* q = new node;
q = head;
p = head->next;
if (head->index != in)
{
while (p->index != in)
{
q = p;
p = p->next;
}
q->next = p->next;
delete[] p;
node* tmp = new node;
tmp = tail;
tmp->next = new_node;
tail = new_node;
tail->next = tail;
tail->value = -1;
}
else
{
head = p;
delete[]p;
delete[]q;
}
}
int main()
{
int max = 10;
int data;
srand(time(NULL));
for (int i = 1; i <= max; i++)
{
data = rand() % 100 + 1;
add_node_to_tail(data,i);
}
print(head);
printf("\n");
int b;
scanf_s("%d", &b);
delite(b,max);
print(head);
return 0;
}
|