Я пытаюсь создать пузырь, сортировать дважды связанный список, используя функцию swap. Мой вопрос заключается в том, что функция swap меняет указатель, а не только данные? Мой код показывает мне, что он меняет только данные, а не указатели. Есть ли способ эффективно менять указатели в связанном списке? Пожалуйста, покажите мне код, поскольку я очень неопытен в кодировании, и я не понимаю других кодов в другом ответе.Сортировка связанного списка с сортировкой пузыря в C++
void sortPoly(PolyNode* a)
{
PolyNode* head =a;
PolyNode* current = head;
PolyNode* current_next = current->next;
int len =Polylength(current);
if(len ==1 || len ==0)
{
return;
}
for(int i =0; i < len; i++)
{
for (int j =0; j< len -i; j++)
{
int sum = current->expx + current->expy;
cout << "sum=" << sum << endl;
int next_sum = current_next->expx + current_next->expy;
cout << "\t nextsum=" << next_sum << endl;
if(sum < next_sum)
{
cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;
std:: swap(current, current_next);
cout << endl;
cout << "swapped" << endl;
cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;
cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;
current = current->next;
current_next = current->next->next;
cout << "current=" << current->coef << "expx = " << current->expx << "expy=" << current->expy << endl;
cout << "current_next=" << current_next->coef << "expx = " << current_next->expx << "expy=" << current_next->expy << endl;
}
}
}
Это моя структура:
struct PolyNode
{
int coef;
int expx;
int expy;
PolyNode* prev;
PolyNode* next;
};
Вы можете найти после моего ответа на Mac терминала.
так у вас есть свой собственный список реализации? попробуйте разбить проблему на более мелких шагах, вам нужно как-то сравнить 2 узла и реализовать функцию для правильной замены 2 узла (вы можете решить, что делать с swap: данными или указателями из-за эффекта кеша, вероятно, это более эффективная свопинг данных, но вы можете решить эту деталь), конечным результатом будет список, в котором итерация предоставит отсортированные элементы. пока вы не уверены, что у вас есть правильный «SWAP», и правильный «COMPARE» даже не пытается сделать вид – GameDeveloper