Cześć mam problem z funkcją c++ oto treść zadania " funkcja usun rozpatrującą rozłączne trójki elementów sznura i usuwającą drugi i trzeci element trójki jeżeli w trójce nie ma elementów podzielnych przez K (gdzie K jest liczbą całkowitą dodatnią będącą parametrem funkcji), albo - w przeciwnym przypadku - pierwszy element trójki oraz element znajdujący się o dwa dalej niż koniec bieżącej trójki" (tj. następnik elementu stojącego bezpośrednio za trójką) jeśli taki element jest (kolejna rozpatrywana trójka będzie wtedy złożona z elementu stojącego bezpośrednio za bieżącą trójką i dwóch elementów stojących za elementem dodatkowo usuwanym). Trójki wybierane są tak, że pierwszy element sznura jest początkowym elementem pierwszej trójki; jeśli końcowe elementy sznura nie wchodzą w skład żadnej trójki, to nie są usuwane. Pamięć zajmowana przez usuwane elementy ma zostać zwolniona. Funkcja nie może używać pomocniczych funkcji, tablic, pomocniczych sznurów ani struktur danych dostępnych w bibliotece standardowej (wektorów, list, kolejek, itp.). Przykłady:
dla K=2 sznur 1,1.1.1,2,3,3,5,6,6,7,8 zostanie przekształcony do postaci 1,2,3,6,6,7 (po sprawdzaniu kolejno trójek: 1,1.1; 1,2,3 [dodatkowo usuwamy 5]; 3,6,6 [dodatkowo usuwamy 8]),
dla K=2 sznur -2,1,2,3,4,5,7,8,9 zostanie przekształcony do postaci 1,2,3,8,9."
Oto mój kod w c++:
void sznur::usun( int K )
{
Node * current = pocz;
Node * prev = nullptr;
while( current && current->nast && current->nast->nast ) {
Node * first = current;
Node * second = current->nast;
Node * third = current->nast->nast;
Node * nextAfterThird = third->nast;
if(( first->dane % K != 0 ) &&( second->dane % K != 0 ) &&( third->dane % K != 0 ) ) {
if( prev ) {
prev->nast = first;
} else {
pocz = first;
}
delete second;
delete third;
ileJest -= 2;
current = nextAfterThird;
} else {
if( nextAfterThird ) {
delete nextAfterThird;
ileJest -= 2;
first->nast = nextAfterThird->nast;
}
}
prev = first;
}
}
//1 1 1 1 2 3 3 5 6 6 7 8 K=2
//-2 1 2 3 4 5 7 8 9 K=2
Pytanie brzmi jak usunąć element trojki o dwa dalej np dla 1,2,3,3,5 usuwamy 1 i 5 jak go usunąć i jednocześnie jak zaktualizować wskaźnik żeby nie odczytywał miejsca pustego w miejscu 5 i przenieść go na następny z góry dziekuje za pomoc