有序单链表的节点内元素排序:

//链表排序
void pop_sort(DataNode *head)   //链表冒泡排序,节点交换法(还有换值法);传入头节点指针 
{                            //排序中没有修改头节点指针值,只是修改指针内容head->next的值 
    DataNode *pre,*p,*tail,*temp;
    tail=NULL;
    pre=head;

    while((head->next->next)!=tail)//(head->next)!=tail同样适用 ,多执行最后一个步比较 
    {
        p=head->next;
        pre=head;
        while(p->next!=tail)
        {
            if((p->num)>(p->next->num))
            {
            /*    pre->next=p->next; //交换节点方法一
                p->next = p->next->next;
                pre->next->next = p;
                p = pre->next; */

                pre->next=p->next; //交换节点方法二 
                temp=p->next->next;
                p->next->next=p;
                p->next=temp;
                p=pre->next;  //p回退一个节点 
            }
            p=p->next;  //p再前进一个节点 
            pre=pre->next;
        }
        tail=p;
    }
}
12-24 15:34
查看更多