数据结构 - 单链表交换节点
普通情况的结点交换
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;
}
}