链表的插入排序。(147. 对链表进行插入排序)

1,题目:

2.代码图:

 

3,代码文本;

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */


struct ListNode* insertionSortList(struct ListNode* head){
            if(head==NULL||head->next==NULL) //head->next==NULL这里是多余的。
            return head;
    //1.初始条件
    struct ListNode* sortHead=head;
    struct ListNode* cur=head->next;
    sortHead->next=NULL;  //****断开与后面链接。
    while(cur) //终止条件,全部排完。
    {
        //3.迭代条件
       struct ListNode* next=cur->next;  //************第二步迭代
       //将cur节点插入到前面有序链表中。
       struct ListNode* p=NULL,*c=sortHead;
       while(c)     //找到在有序链表哪一个后面插入。
       {
           if(cur->val<c->val)  //准备插才c的后面哦。
           {
               break;
           }else 
           {
               p=c;
               c=c->next;
           }
       }
       if(p==NULL)  //比头小,相当于头插,
       {

           cur->next=c;
           sortHead=cur;    //新头
       }else   //相当与中间插入。
       {
           p->next =cur;
           cur->next=c;    //中间插入,头不用迭代。
       }
       cur=next;//第一步迭代
    }   
      return sortHead;  
}

 4,思路,假设第一个有序,每次排一个,知道排完全部元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LYH_1_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值