我一直在尝试使用交换函数对双向链表进行冒泡排序。我的问题是交换功能交换指针,而不仅仅是数据?我的代码告诉我它只交换数据而不是指针。有什么办法有效地交换链接列表上的指针?请向我展示代码,因为我在编码方面很缺乏经验,并且在其他答案中我不了解其他代码。用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;
};
让你有你自己的列表实现?尝试以较小的步骤来解决问题,您需要以某种方式比较2个节点并实现正确交换2个节点的功能(您可以决定交换什么:数据或指针,由于缓存效应,它可能更有效地交换数据,但你可以决定这个细节)最终的结果将会是一个迭代的列表给出排序后的元素。直到你不确定你有一个正确的“SWAP”和一个正确的“比较”,甚至不尝试做一个排序 – GameDeveloper