Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском.
Закрыт 1 год назад.
Не могу сделать нормальную функцию по замене элементов в односвязном списке. Функция swap_val неправильно работает. Если свапать 2 рядом стоящих элемента программа просто крашится.
И кстати если брать 0-ой и например 3-ий элемент, то прога тоже некоректно работает. Помогите пожалуйста, не могу понять.
Вот код программы: https://pastebin.com/CKPXRGSC
При обмене двух элементов, которые рядом, нужно делать по-другому. Далее учитывать нужно если элемент первый в списке, то у него предыдущего нет. При смене первого элементы нужно не забыть поменять переменную head в классе.
template<typename T>
void List<T>::swap_val(int ind_1, int ind_2){
Node<T> *p1, *prev_p1, *p2, *prev_p2, *tmp_pos;
Node<T> *current = this->head;
if(ind_1){
prev_p2 = head;
for(int i = 1; i < ind_1; i++)
prev_p2 = prev_p2->pNext;
p2 = prev_p2->pNext;}
else{
// если индекс равен нулю, то предыдущий указатель 0
prev_p2=0;p2=head;}
if(ind_2){
prev_p1 = head;
for(int i = 1; i < ind_2; i++)
prev_p1 = prev_p1->pNext;
p1 = prev_p1->pNext;}
else{
// если индекс равен нулю, то предыдущий указатель 0
prev_p1=0;p1=head;}
if(p2->pNext == p1){
// если элементы находятся рядом, то обмен делаем по-другому
p2->pNext = p1->pNext;
p1->pNext=p2;
// проверяем, есть-ли предыдущий
if(prev_p2)prev_p2->pNext=p1;}
else
if(p1->pNext == p2){
// если элементы находятся рядом, то обмен делаем по-другому
p1->pNext = p2->pNext;
p2->pNext =p1;
// проверяем, есть-ли предыдущий
if(prev_p1)prev_p1->pNext=p2;}
else{
// стандартный обмен
tmp_pos = p1->pNext;
p1->pNext = p2->pNext;
p2->pNext = tmp_pos;
// проверяем, есть-ли предыдущий
if(prev_p1) prev_p1->pNext = p2;
if(prev_p2) prev_p2->pNext = p1; }
// если индекс был в начале, то меняем начало в классе
if(ind_1 == 0)head = p1;
if(ind_2 == 0)head = p2;
}
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть таблица wxPropertyGrid с различными полями (wxStringProperty, wxUIntProperty, wxBoolProperty и тд