链表插入排序(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是下一个待插入结点的指针 
    } 
  }
}

  

 

转载于:https://www.cnblogs.com/lanying/p/4565699.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值