C语言单链表:升序排列函数

C语言单链表:这是一个将链表元素进行升序排列的函数,算法是我自己想出来的,具体的思路是:创建一个新链表,找到原链表中数据域最小的结点插入新链表中,再在原链表中将该结点删除。重复上述步骤,直到原链表为空则停止操作,此时的新链表为升序排列的链表。但将这个思路转化为程序时,不知道哪错了。请各位小伙伴帮忙看看,谢谢!


```c
void sort(polynomial* L)//排序函数
{
    polynomial* NewL = (polynomial*)malloc(sizeof(polynomial));
    polynomial* np = NewL;
    polynomial* r = NULL;
    polynomial* s = NULL;
    while (1)
    {
        polynomial* q = L;
        polynomial* p = L->next;
        if (!p)
            break;
        double min = p->coef;
        r = q;
        s = p;
        while (p)//找到多项式中系数最小的项
        {
            if (p->coef < min)
            {
                min = p->coef;
                r = q;
                s = p;
            }
            p = p->next;
            q = q->next;
        }
        r->next = s->next;//将链表中系数最小的项删除
        np->next = s;//将链表中系数最小的项插入新链表的表尾
        np = np->next;//将新链表的尾指针后移一位
    }
    np->next = NULL;
    L = NewL;
}

```

报错信息发一下

修改如下,改动处见注释,供参考:

void sort(polynomial* L)//排序函数
{
    polynomial* NewL = (polynomial*)malloc(sizeof(polynomial));
    polynomial* np = NewL;
    polynomial* r = NULL;
    polynomial* s = NULL;
    while (1)
    {
        polynomial* q = L;
        polynomial* p = L->next;
        if (!p)   break;
        double min = p->coef;
        r = q;
        s = p;
        while (p)//找到多项式中系数最小的项
        {
            if (p->coef < min)
            {
                min = p->coef;
                r = q;
                s = p;
            }
            q = p;//q = q->next; 修改
            p = p->next;
        }
        r->next = s->next; //将链表中系数最小的项删除
        s->next = NULL;//修改
        np->next = s;      //将链表中系数最小的项插入新链表的表尾
        np = s;      //np = np->next; 修改
    }
    //np->next = NULL; 修改
    L->next = NewL->next;  //  L = NewL; 修改
    free(NewL);        //修改
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^