[英]Sorting linked list with bubble sort in 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;
};
我認為您可能在交換功能上有問題。 我不認為std :: swap也可以交換上一個和下一個參考。 當然,您可以實現自己的交換。 我會用這個功能做到這一點。
void swap(PolyNode* node1, PolyNode* node2){
PolyNode* prev = node1->prev;
PolyNode* next = node2->next;
if (prev)
prev->next = node2;
if (next)
next->prev = node1;
node1->next = next;
node1->prev = node2;
node2->prev = prev;
node2->next = node1;
}
順便說一句,您必須將迭代移出if。
current = current->next;
current_next = current->next->next;
if
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.