資料結構-單鏈表交換節點
阿新 • • 發佈:2018-12-18
普通情況的結點交換
temp_pre->next = p;
p_pre->next = p->next;//key step
p->next = temp->next;
temp->next = p_pre->next;
p_pre->next = temp;
交換結點時一定要注意那個相鄰結點的情況,不然……
----相鄰結點使用一般情況
會出現大錯誤
相鄰結點單獨處理
temp->next = p->next; p->next = temp; temp_pre->next = p;
具體程式碼如下(整體是一個選擇排序的演算法)
void sort_dec(book* head)
{
book* temp_pre=head;
book* p_pre = head;
book* ex;
//選擇排序
for (book* temp = head->next; temp != NULL; temp = temp->next)
{
p_pre = temp;
for (book* p = temp->next; p != NULL; p = p->next)
{
if (temp->price < p->price)
{
//下面的修改指標的交換方式
if (temp->next == p) //temp與p為相鄰結點
{
temp->next = p->next;
p->next = temp;
temp_pre->next = p;
}
else //一般情況
{
temp_pre->next = p;
p_pre->next = p->next;//key step
p->next = temp-> next;
temp->next = p_pre->next;
p_pre->next = temp;
}
ex = temp;
temp = p;
p = temp;
}
p_pre = p;
}
temp_pre = temp;
}
}