C语言链表交换节点发生错误

img


想请教一下各位这个C语言的链表冒泡排序交换节点的函数哪里错了

你好 可以查看一下这篇文章https://blog.csdn.net/qq_45410446/article/details/129023670

供参考:

void sort(struct student* head)//带头结点链表冒泡排序
{
    struct student* p = NULL, * q = NULL, * tail = NULL; //尾指针置空
    if (!head || !head->next)
        return;
    while ((head->next) != tail)
    {
        p = head;
        q = head->next;
        while (q->next != tail)
        {
            if ((q->num) > (q->next->num))
            {
                p->next = q->next;
                q->next = q->next->next;
                p->next->next = q;
                q = p->next;
            }
            q = q->next;
            p = p->next;
        }
        tail = q;
    }
}