zoukankan      html  css  js  c++  java
  • 链表插入排序(insertion-sort-list)

       自己写的代码有几个比较大的用例一直过不去,网上的代码大部分有问题,思路是先将链表置空表,再将链表中的元素循环插入到指定位置。

      下面是一份正确的代码,但是是带头节点的链表

    void Insertsort(Linklist &L)
    {
        LNode *p,*q,*r,*u;
        p=L->next;L->next=NULL;  //置空表,然后将原链表结点逐个插入到有序表中
        while(p!=NULL)
       {          //当链表尚未到尾,p为工作指针
            r=L;q=L->next;
            while(q!=NULL&&q->data<=p->data)
           {  //查P结点在链表中的插入位置,这时q是工    作指针
                r=q;q=q->next;
            }
            u=p->next;
            p->next=r->next;
            r->next=p;
            p=u; //将P结点链入链表中,r是q的前驱,u是下一个待插入结点的指针
        }
    }   

     本题是没有头节点的链表,修改后如下:

    void Insertsort(Linklist &L)
    {
      ListNode *p,*u,*r,*q,*s; /*h2用来指向需要插入的结点,h3用来指向h2的前一个结点 
      p=L->next; 
      L->next=NULL; //置空表,然后将原链表结点逐个插入到有序表中 
      while(p!=NULL) 
      { //当链表尚未到尾,p为工作指针 
        r=L; 
        q=L->next; 
        if(p->val < L->val) 
        { 
          s=L; 
          u=p->next; 
          p->next=L; 
          L=p; 
          p=u; 
        } 
        else 
        { 
          while(q!=NULL&&q->val<=p->val) 
          { //查P结点在链表中的插入位置,这时q是工作指针 
             r=q;
             q=q->next; 
          } 
          u=p->next; 
          p->next=r->next; 
          r->next=p; 
          p=u; //将P结点链入链表中,r是q的前驱,u是下一个待插入结点的指针 
        } 
      }
    }
    

      

     

  • 相关阅读:
    2012.05.17
    一些记录
    2012.09.09 js
    2012.05.24 jq Tab
    2012.10.08 关于 开发计划制定、项目管理、功能设计 的想法记录
    2012.05.21 jq Tab
    关于工作状态
    ImageWaterMark参数说明
    关于拼接邮件在存储过程中
    关于使用HtmlAgilityPack
  • 原文地址:https://www.cnblogs.com/lanying/p/4565699.html
Copyright © 2011-2022 走看看