#include <iostream>
struct Node {
int value;
Node* next;
};
void usun(Node** pocz, int K)
{
Node *n0 = nullptr;
Node* n1 = *pocz;
while (n1) {
Node* n2 = n1;
while (n2->next && n2->value - n2->next->value == 1) {
n2 = n2->next;
}
if(n1 == n2) {
for (int i = 0; n1 && i < K; ++i) {
n0 = n1;
n1 = n1->next;
}
continue;
}
if (n2) n2 = n2->next;
if(n1 == *pocz) *pocz = n2;
while (n1 != n2) {
Node* p = n1->next;
if(n0) n0->next = p;
delete n1;
n1 = p;
}
}
}
int main(void)
{
int tab[10] = { 9, 7, 6, 6, 6, 6, 5, 3, 3, 1 };
//int tab[6] = { 10, 9, 8, 7, 6, 5 };
//int tab[12] = { 8, 7, 6, 5, 3, 3, 3, 2, 1, 1, 1, 1 };
Node* list;
Node* p = nullptr;
for (int v : tab) {
if(!p) list = p = new Node { v, nullptr };
else { p->next = new Node { v, nullptr }; p = p->next; }
}
usun(&list, 1);
while (list) {
std::cout << list->value << ' ';
Node* p = list;
list = list->next;
delete p;
}
}
O to chodzi?