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