例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;
    }
}
posted @ 2023-09-11 11:16  DawnTraveler  阅读(126)  评论(0编辑  收藏  举报