C语言 双向链表冒泡排序

冒泡排序只交换结点中数据我会 但是我想把整个结点做一个交换 但是有点问题 希望有人能帮我看一下
这是我写的结构体和排序的函数(升序):

    head = pMng->pHead;
    p = head->pNxt;
    for(t=0; t<pMng->nNodeCnt-1; t++)
    {
        p = head->pNxt;
        q = p->pNxt;
        while(NULL != p)
        {
            q = p->pNxt;
            if(p->nKey > q->nKey)
            {
                if(p == head->pNxt)
                {
                    p->pNxt = q->pNxt;
                    q->pNxt->pPre = p;
                    p->pPre = q;
                    q->pNxt = p;
                    head->pNxt = q;
                    q->pPre = head;
                 }
                else
                {
                    p->pNxt = q->pNxt;
                    q->pNxt->pPre = p;
                    q->pPre = p->pPre;
                    q->pNxt = p;
                    p->pPre->pNxt = q;
                    p->pPre = q;
                }
            }
            else
            {
                p = p->pNxt;
            }
        }
根本运行不起来
不知道是不是我的逻辑有问题 我想的就是相邻两个对比大小 大的往后 小的往前 每一次大for循环都完成一个乱序中的大数后沉

while(NULL != p)
{
q = p->pNxt;
if(p->nKey > q->nKey)
这p!=NULL,并不能保证p->pNxt不等于NULL啊,你直接就q->nKey开始操作,会崩溃的

数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633

程序运行不起来是运行报错还是执行了业务后,链表状态不变?

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632