我的專案是一個雙向鏈表的冒泡排序系統。我正在嘗試按日期對雙向鏈表(它們是物件)的元素進行排序。我使用了基于指標的排序,因為我不想改變指標的資料。問題是我的代碼可以(我認為有效)對鏈表進行排序。但最后,當我嘗試列印鏈表的物件時,我的頭不在應該的位置。你可以幫幫我嗎?
struct DoubleNode *DoubleDynamic::swap( DoubleNode *pointer1, DoubleNode *pointer2) {
DoubleNode* temp=pointer2->next;
pointer2->next=pointer1;
pointer2->prev=pointer1->prev;
pointer1->next=temp;
pointer1->prev=pointer2;
return pointer2;
}
void DoubleDynamic::sort(int size)
{
DoubleNode* temp;
DoubleNode* current;
bool sorting;
if (head==NULL)
{
return;
}else
{
for (int i = 0; i <= size; i)
{
sorting= false;
temp=head;
for (int j = 0; j < size-1-i; j)
{
DoubleNode *employee1=temp;
DoubleNode *employee2=employee1->next;
if (employee2!=NULL)
{
if (employee1->data->getAppointment().operator>(employee2->data->getAppointment()))
{
temp = swap(employee1,employee2);
sorting= true;
}
temp= temp->next;
}
}
if (!sorting)
{
break;
}
}
}
current=head;
while (current->prev!=NULL)
{
current=current->prev;
}
head=current;
}
void DoubleDynamic::display()
{
struct DoubleNode *trav;
trav=head;
if (trav==NULL)
{
cout<<"Liste bo? yaa"<<endl;
}
while (trav != NULL)
{
cout<<*(trav->data)<<endl;
trav=trav->next;
}
cout<<endl;
}
uj5u.com熱心網友回復:
問題在于,當您交換頭指標時,您不會更新head以參考新的頭節點。
解決此問題的一種方法是在進行交換后,您應該檢查是否應該更新頭指標。
temp = swap(employee1,employee2);
if (employee1 == head)
head = temp;
或者, in swap,如果prev分配給 in的新指標pointer2->prev=pointer1->prev;為 NULL 則更新頭(因為頭節點沒有前一個節點)。
if ((pointer2->prev=pointer1->prev) == nullptr)
head = pointer2;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/372505.html
上一篇:C -如何計算程式中得分最高的人
下一篇:一個打出包含字符的板的程式
