例2.8 已知带头结点单链表L,设计算法实现:以表中第一元素作为标准,将表中所有值小于第一个元素的结点均放在第一结点之前,所有值大于第一元素的结点均放在第一元素结点之后。
1.题目
例2.8已知带头结点单链表L,设计算法实现:以表中第一元素作为标准,将表中所有值小于第一个元素的结点均放在第一结点之前,所有值大于第一元素的结点均放在第一元素结点之后。
2.算法分析
3.代码
//顺序调整
void changeList(LinkList L){
int temp;
/* pre为前一节点, pa为后一节点 */
Node *pa = L->next, *pre;
temp = pa->num;
while (pa->next){
if (pa->next->num < temp){
/* 移动节点 */
pre = pa;
pa = pa->next;
pre->next = pa->next;
/* 头插法 */
pa->next = L->next;
L->next = pa;
/* 将pa的位置重置 */
pa = pre;
}
/* 不做处理,向后推进 */
else pa = pa->next;
}
}