[英]Doubly Linked List Bubble Sort
我的項目是一個雙向鏈表的冒泡排序系統。 我正在嘗試按日期對雙向鏈表(即對象)的元素進行排序。 我使用基於指針的排序,因為我不想更改指針的數據。 問題是我的代碼可以(我認為有效)對鏈表進行排序。 但是最后,當我嘗試打印鏈表的對象時,我的頭不在它應該在的位置。 你可以幫幫我嗎?
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;
}
問題是當你交換頭指針時,你並沒有更新head
引用新的頭節點。
解決此問題的一種方法是在進行交換之后,您應該檢查是否應該更新頭指針。
temp = swap(employee1,employee2);
if (employee1 == head)
head = temp;
或者,在swap
中,如果在pointer2->prev=pointer1->prev;
中分配的新prev
指針; 是 NULL 然后更新頭部(因為頭部節點沒有前一個節點)。
if ((pointer2->prev=pointer1->prev) == nullptr)
head = pointer2;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.