王道课后习题2.3.6:设计一个算法使单链表L元素递增有序

题目描述:

有一个带头结点的单链表L,设计一个算法使其元素递增有序

算法思想:

类似于直接插入排序。找到要插入的位置。只是直接插入排序是从后往前找要插入的位置,这里的单链表只能从前往后找要插入的位置。

原序列:L->1->4->2->3->6

L->1->NULL


若排序到这一步:
L->1->2->4   待插入3

pre p			q  r
L-> 1-> 2-> 4   3->6

		pre p	q  r
L-> 1-> 2-> 4   3->6

pre p			   q
L-> 1-> 2-> 3->4   3

每次pre和p都得从头出发

核心代码:

void SortList(LNode* &L)
{
    LNode* q=L->next->next;
    L->next->next=NULL;
    while(q!=NULL)
    {
        LNode* r=q->next;

        LNode* pre=L;
        LNode* p=L->next;
        while(p&&p->datadata)//这里要加一个p!=NULL才行
        //还有一个细节:p!=NULL要放在前面。
        //不然的话如果p为空了,p->datadata就会报错
        //1->2->3  4
        {
            pre=p;
   

你可能感兴趣的:(王道课后习题+)