xcx16 2022-05-11 09:51 采纳率: 76.9%
浏览 27

c语言单链表的排序问题

img


这个链表带头节点,但是进行排序操作后,结果并没有排序,如下就是没结果的图

img

  • 写回答

2条回答 默认 最新

  • 吕布辕门 新星创作者: 后端开发技术领域 2022-05-11 10:02
    关注

    你可以参考一下我这个排序,冒泡排序,而且效率比较高些。

    
    /*
    typedef struct List{
        int i;
        struct List* next;
    }s;
    */
    s* BubbleSort(s*head)
    {
        if(head==NULL||head->next==NULL)     //如果链表为空或只有一个节点,直接返回 
            return head;
        if(head->next->next==NULL)            //对只有两个节点的单独处理 
        {
            if(head->i>head->next->i)
            {
                head->next->next=head;
                head=head->next;
                head->next->next=NULL;
            }
            return head;
        }
        //链表至少有三个节点    
        s*pleft=head,*p=pleft->next,*pright=p->next,*tem;
        int flag=1;
        while(flag)
        {
            pleft=head,p=pleft->next,pright=p->next;
            if(pleft->i>p->i)//因为之后的排序只能将除首节点之外的节点排序,所以我在这里对首节点进行处理 
            {
                head=p;
                p->next=pleft;
                pleft->next=pright;
                //此时三指针顺序为p pleft pright
                tem=p;
                p=pleft;
                pleft=tem;    
            } 
            flag=0;
            while(pright)
            {
                if(p->i>pright->i)
                {
                    pleft->next=pright;
                    p->next=pright->next;
                    pright->next=p;            
                    //此时三个指针的顺序为pleft,pright,p 
                    tem=p;
                    p=pright;
                    pright=tem;
                    flag=1;    
                }
                pleft=p;
                p=pright;
                pright=pright->next;
            }    
        }
        return head;    
    }
    
    评论

报告相同问题?

问题事件

  • 创建了问题 5月11日